.NET MVC 验证码
.NET MVC 验证码
效果差不多就这样,接下来直接上代码。
验证码生成器
- public class ValidateCode
- {
- public static ValidateCode Default = new ValidateCode();
- public int ImageWidth { get; set; }
- public int ImageHeight { get; set; }
- public string Letters { get; set; }
- public int CodeLength { get; set; }
- private Random r = new Random();
- public ValidateCode()
- {
- ImageWidth = 200;
- ImageHeight = 60;
- CodeLength = 6;
- Letters = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ1234567890";
- }
- public string GetValidationCode()
- {
- //合法随机显示字符列表
- System.Text.StringBuilder s = new System.Text.StringBuilder();
- //将随机生成的字符串绘制到图片上
- for (int i = 0; i < CodeLength; i++)
- {
- s.Append(Letters.Substring(r.Next(0, Letters.Length - 1), 1));
- }
- return s.ToString();
- }
- public byte[] GetValidationImage(string codeString)
- {
- //设置输出流图片格式
- var b = new System.Drawing.Bitmap(ImageWidth, ImageHeight);
- var g = System.Drawing.Graphics.FromImage(b);
- int ColorR = r.Next(0, 255);
- int ColorG = r.Next(0, 255);
- int ColorB = r.Next(0, 255);
- g.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(ColorR, ColorG, ColorB)), 0, 0, 200, 60);
- var font = new System.Drawing.Font(System.Drawing.FontFamily.GenericSerif, 48, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel);
- //合法随机显示字符列表
- //将随机生成的字符串绘制到图片上
- for (int i = 0; i < codeString.Length; i++)
- {
- int sR = r.Next(0, 255);
- int sG = r.Next(0, 255);
- int sB = r.Next(0, 255);
- while (Math.Abs(sR - ColorR) < 35) sR = r.Next(0, 255);
- while (Math.Abs(sG - ColorG) < 35) sG = r.Next(0, 255);
- while (Math.Abs(sB - ColorB) < 35) sB = r.Next(0, 255);
- g.DrawString(codeString[i].ToString(), font, new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(sR, sG, sB)), i * (200 / codeString.Length - 2), r.Next(0, 15));
- }
- //生成干扰线条
- var pen = new System.Drawing.Pen(new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255))), 2);
- for (int i = 0; i < 10; i++)
- {
- g.DrawLine(pen, new System.Drawing.Point(r.Next(0, 199), r.Next(0, 59)), new System.Drawing.Point(r.Next(0, 199), r.Next(0, 59)));
- }
- var stream = new System.IO.MemoryStream();
- b.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
- g.Dispose();
- b.Dispose();
- //输出图片流
- return stream.ToArray();
- }
- }
使用方法
- public ActionResult validateCode() //创建一个action用于返回验证码图片
- {
- string validateCode = ValidateCode.Default.GetValidationCode(); //获取验证码
- Session["LoginValidateCode"] = validateCode; //将验证码保存到Session中
- return File(ValidateCode.Default.GetValidationImage(validateCode), @"image/jpeg"); //返回验证码图片
- }
- //直接将这个action 的地址赋值给img标签就可以了,例如 <img src="http://localhost:5695/home/validateCode" alt="">
- public ActionResult Login(string validateCode)
- {
- if (String.IsNullOrEmpty(Session["LoginValidateCode"].ToString()))
- {
- return Content("你登录页面停留的时间过久页已经超时");
- }
- else if (!Session["LoginValidateCode"].ToString().Equals(validateCode, StringComparison.CurrentCultureIgnoreCase))
- {
- return Content("验证码错误");
- }
- return RedirectToAction("Index"); //成功
- }
分类:
.NET
, ASP.NET MVC5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构