随机生成登录验证码(4位)
Posted JoeYD
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机生成登录验证码(4位)相关的知识,希望对你有一定的参考价值。
前:
<script src="~/Scripts/jquery-1.10.2.min.js"></script> <input type="text" name="code" id="code" lay-verify="required|num" autocomplete="off" placeholder="输入验证码"> <img src="../Home/YZM" onclick="chageimg()" height="28" id="refImg" style="cursor:pointer;" title="点击刷新" /> <input type="button" value="登录" onclick="Login()"/> <script> function chageimg() { $("#refImg").attr("src", "../Home/YZM?timestamp=" + new Date().getTime()); } function Login() { var code = $("#code").val(); $.ajax({ type: \'Post\', url: \'/Home/YZMCheck\', data: { code: code }, success: function (data) { if (data.succ) { alert(data.msg); } else { alert(data.msg); return false; } }, complete: function (data) { } }) } </script>
后:
public ActionResult Index() { return View(); } /// <summary> /// 生成验证码 /// </summary> /// <returns></returns> public ActionResult YZM() { string oldcode = TempData["SecurityCode"] as string; string code = CreateRandomCode(4); //验证码的字符为4个 Session["YZMCode"] = code; TempData["SecurityCode"] = code; //验证码存放在TempData中 return File(CreateValidateGraphic(code), "image/Jpeg"); } /// <summary> /// 验证码校验 /// </summary> /// <param name="code"></param> /// <returns></returns> public JsonResult YZMCheck(string code) { string msg = null;//返回的信息 bool succ = false;//是否成功 string yzmcode = Session["YZMCode"].ToString(); if(code==yzmcode) { succ = true; msg = "验证成功!"; } else { succ = false; msg = "验证失败!"; } var json = new { msg = msg, succ = succ }; return Json(json); } /// <summary> /// 生成随机的字符串 /// </summary> /// <param name="codeCount"></param> /// <returns></returns> public string CreateRandomCode(int codeCount) { string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,a,b,c,d,e,f,g,h,i,g,k,l,m,n,o,p,q,r,F,G,H,I,G,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,s,t,u,v,w,x,y,z"; string[] allCharArray = allChar.Split(\',\'); string randomCode = ""; int temp = -1; Random rand = new Random(); for (int i = 0; i < codeCount; i++) { if (temp != -1) { rand = new Random(i * temp * ((int)DateTime.Now.Ticks)); } int t = rand.Next(35); if (temp == t) { return CreateRandomCode(codeCount); } temp = t; randomCode += allCharArray[t]; } return randomCode; } /// <summary> /// 创建验证码图片 /// </summary> /// <param name="validateCode"></param> /// <returns></returns> public byte[] CreateValidateGraphic(string validateCode) { Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), 27); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); //画图片的干扰线 for (int i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, x2, y1, y2); } Font font = new Font("Arial", 13, (FontStyle.Bold | FontStyle.Italic)); LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(validateCode, font, brush, 3, 2); //画图片的前景干扰线 for (int i = 0; i < 100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); //保存图片数据 MemoryStream stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); //输出图片流 return stream.ToArray(); } finally { g.Dispose(); image.Dispose(); } }
以上是关于随机生成登录验证码(4位)的主要内容,如果未能解决你的问题,请参考以下文章