AI智能
改变未来

简易的asp.net登录图片验证码

第一次写博客,有写得不好的地方欢迎指出来哈
因工作上的需求需要在项目中使用到图片验证码,之前的验证码 大概是8年前的不太符合现在的审美,因此在网上查找比较新的验证码。
用百度搜索出来的结果不太理想,遂用谷歌进行搜索,发现了微软有人放出了验证码的代码,所以对代码进行借用

第一步:新建ashx文件,取名ImageCodeHandler
第二步,代码内容如下:

using System;using System.Web;using System.Drawing;using System.Text;using System.Drawing.Imaging;public class ImageCodeHandler : IHttpHandler,System.Web.SessionState.IRequiresSessionState {public void ProcessRequest(HttpContext context){bool isCreate = true;//创建时间初始化,在页面刷新的时候重新获得新的验证码context.Session[\"CreateTime\"] = null;if (context.Session[\"CreateTime\"] == null){context.Session[\"CreateTime\"] = DateTime.Now;}else{DateTime startTime = Convert.ToDateTime(context.Session[\"CreateTime\"]);DateTime endTime = Convert.ToDateTime(DateTime.Now);TimeSpan ts = endTime - startTime;// 超时则获得新的验证码if (ts.Minutes > 15){isCreate = true;context.Session[\"CreateTime\"] = DateTime.Now;}else{isCreate = false;}}context.Response.ContentType = \"image/gif\";//绘制图象Bitmap basemap = new Bitmap(200, 60);Graphics graph = Graphics.FromImage(basemap);graph.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);Random r = new Random();//会出现的字符string letters = \"ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz0123456789\";string letter;StringBuilder s = new StringBuilder();if (isCreate){// 随机生成5个字母或者数字for (int x = 0; x < 5; x++){letter = letters.Substring(r.Next(0, letters.Length - 1), 1);s.Append(letter);// 绘制文字graph.DrawString(letter, font, new SolidBrush(Color.Black), x * 38, r.Next(0, 15));}}else{// 创建失败则绘制先前存在的验证码string currentCode = context.Session[\"ValidateCode\"].ToString();s.Append(currentCode);foreach (char item in currentCode){letter = item.ToString();// 绘制文字graph.DrawString(letter, font, new SolidBrush(Color.Black), currentCode.IndexOf(item) * 38, r.Next(0, 15));}}// 混淆背景Pen linePen = new Pen(new SolidBrush(Color.Black), 2);for (int x = 0; x < 10; x++){graph.DrawLine(linePen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));}// 保存图片basemap.Save(context.Response.OutputStream, ImageFormat.Gif);// 传递验证码的值context.Session[\"ValidateCode\"] = s.ToString();context.Response.End();}public bool IsReusable{get{return false;}}}

第三步:在aspx页面上放置验证码,代码如下,textbox输入验证码,imagebutton显示验证码,点击图片重新触发获得新的验证码

<span>验证码:</span><asp:TextBox ID=\"txt_validCode\" runat=\"server\"  Width=\"120\"></asp:TextBox><asp:ImageButton ID=\"img_validCode\" ImageUrl=\"ImageCodeHandler.ashx\" runat=\"server\" οnclick=\"reload()\" Height=\"40\" />

第四步:添加触发事件判断textbox里的内容与验证码的内容是否相同

if (!txt_validCode.Text.Trim().ToLower().Equals(Session[\"ValidateCode\"].ToString().ToLower()))//输出内容

通过以上代码就可以展示一个简单又比较美观的验证码了,效果如图

  • 点赞
  • 收藏
  • 分享
  • 文章举报

某细节发布了1 篇原创文章 · 获赞 0 · 访问量 7私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 简易的asp.net登录图片验证码