方法:
///
/// 获取一个由数字和26个小写字母组成的指定长度的随即字符串
///
/// 指定长度
///
public static string GetRandomNumAndLetters(int intLong)
{
string strResult = "";
string[] array = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
Random r = new Random();
for (int i = 0; i < intLong; i++)
{
strResult += array[r.Next(36)];
}
return strResult;
}
///
/// 生成网页验证码数据
///
/// 验证码上显示的内容
/// 宽度
/// 高度
///
public static byte[] CreateImage(string randomCode, int imgWdith = 70, int imgHeight = 28)
{
Bitmap map = new Bitmap(imgWdith, imgHeight);//创建图片背景
Graphics graph = Graphics.FromImage(map);
graph.Clear(Color.AliceBlue);//清除画面,填充背景
Random rand = new Random();
//背景噪点生成
Brush blackPen = new SolidBrush(Color.LightGray);
for (int i = 0; i < 50; i++)
{
int x = rand.Next(0, map.Width);
int y = rand.Next(0, map.Height);
graph.FillRectangle(blackPen, x, y, 2, 2);
}
var chars = randomCode.ToCharArray();
Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
float[] fontSize = { 10f, 12f, 14f, 16f };
var offset = 5f;
var sf = new StringFormat { LineAlignment = StringAlignment.Center };
foreach (var t in chars)
{
var cindex = rand.Next(7);
var findex = rand.Next(5);
var f = new Font(font[findex], fontSize[rand.Next(0, 4)], FontStyle.Bold);
Brush b = new SolidBrush(c[cindex]);
var s = t.ToString();
graph.DrawString(s, f, b, new RectangleF(offset, 0, map.Width, map.Height), sf);
offset += graph.MeasureString(s, f).Width;
b.Dispose();
f.Dispose();
}
sf.Dispose();
var ms = new MemoryStream();
map.Save(ms, ImageFormat.Jpeg);
var buffer = ms.ToArray();
ms.Dispose();
graph.Dispose();
map.Dispose();
return buffer;
}
Html:
验证码:
/Login/CheckCodeImage" id="checkCodeimgs" />
js刷新验证码:
$("#checkCodeimgs").click(function () {
var math = Math.ceil(Math.random() * 10000);
$("#checkCodeimgs").attr("src", "/Login/CheckCodeImage/" + math)
});
对应的方法:
public ActionResult CheckCodeImage()
{
string randCode = StringHelper.GetRandomNumAndLetters(4);
Session["randCode"] = randCode;
byte[] img = StringHelper.CreateImage(randCode, 70, 28);
return File(img, "image/jpeg");
}
获取 var checkCode = $("#checkCode").val();
$.post("/Login/Index", { UserName: userName, UserPwd: userPwd, savePass: savePass, checkCode: checkCode}, function (ref) {
if (ref.sessace)
{
window.location.href = "/Home/Index";
}
else
{
alert(ref.msg);
$("#checkCode").val("");
$("#changBtn").click();
}
},'json');
在 提交方法加public ActionResult Index(string userName ,string userPwd ,string savePass,string checkCode)
里加判断:
string randCode = Session["randCode"].ToString();
if (checkCode == randCode)
{
}
else
{
return Json(new { sessace = false, msg = "验证码输入不正确!" }, JsonRequestBehavior.AllowGet);
}



