C#使用GDI+实现生成验证码
一、概述
一般处理程序 ashx :它没有服务器控件,用response输出什么就是什么。
【C#使用GDI+实现生成验证码】生成验证码原理:产生随机字符,并将字符生成为图片,同时储存到Session里去,然后验证用户输入的内容是否与Session中的验证码相符即可。
效果图:用户可以点击切换验证码信息。
文章图片
二、一般处理程序
public class CheckCodeHandler : IHttpHandler, IRequiresSessionState//使用到Session,需要实现此接口IRequiresSessionState{private int intLength = 5; //长度private string strIdentify = "Identify"; //随机字串存储键值,以便存储到Session中/// /// 生成验证图片核心代码/// /// public void ProcessRequest(HttpContext context){//背景用白色填充Bitmap map = new Bitmap(200, 60); Graphics g = Graphics.FromImage(map); g.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60); //将随机生成的字符串绘制到图片上string letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; Random r = new Random(); StringBuilder s = new StringBuilder(); Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel); for (int i = 0; i < intLength; i++){s.Append(letters.Substring(r.Next(0, letters.Length - 1), 1)); g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.Blue), i * 38, r.Next(0, 15)); }font.Dispose(); context.Session[strIdentify] = s.ToString(); //先保存在Session中,验证与用户输入是否一致//生成干扰线条,混淆背景Pen pen = new Pen(new SolidBrush(Color.Blue), 2); for (int i = 0; i < 10; i++){g.DrawLine(pen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59))); }pen.Dispose(); //设置输出流图片格式context.Response.ContentType = "image/gif"; map.Save(context.Response.OutputStream, ImageFormat.Gif); map.Dispose(); context.Response.End(); }public bool IsReusable{get{return false; }}}
三、在页面调用
文章图片
if (this.TextBox1.Text.ToUpper().Trim() != Session["strIdentify"].ToString().ToUpper().Trim()){Response.Write(""); }else{Response.Write(""); }
到此这篇关于C#使用GDI+实现生成验证码的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- 使用ACRA和Cloudant自动生成Android崩溃报告
- 如何使用Let’s Encrypt的加密证书设置Nginx()
- 如何使用Amplify监视Nginx和PHP应用程序()
- 使用maven创建的webapp自动设置了首页
- 使用Twidroid&?039;的public intent从您自己的Android应用程序发送Twitter消息
- 使用Python,Twisted和Django通过Android手机控制笔记本电脑
- 科普|大脑“返老还童”?科学家利用脑脊液实现老年小鼠记忆改善|钛媒体科普
- 使用AppleScript构建和运行XCode
- Kickapps(使用jQuery&CSS在成员配置文件编辑页面中隐藏MYRSS&MYLINKS按钮)
- 构建实时,多平台移动应用程序(使用Ionic Framework和Firebase的示例)