Asp.net验证码
2009-07-23 10:53
302 查看
刚做一网站,需要验证码。网上看了好多,自己又改了改,写成下面这个,基于C#
先看下效果:
网站->添加新项->一般处理程序,添加一个名为VerificationCode.ashx的文件。
代码如下:
生成的验证码存入Session,验证时判断一下即可。
使用时可以用img:
这样可以实现点击图片,刷新验证码的功能。
先看下效果:
网站->添加新项->一般处理程序,添加一个名为VerificationCode.ashx的文件。
代码如下:
<%@ WebHandler Language="C#" Class="VerificationCode" %> using System; using System.Web; using System.Drawing; using System.Drawing.Imaging; using System.Text; using System.Web.SessionState; public class VerificationCode : IHttpHandler, IRequiresSessionState /*加上这个接口,否则不能读写Session*/ { #region 私有成员 string code; //验证码 int codeLength = 4; //验证码长度 int width = 70; //图片宽度 int height = 25; //图片高度 int fontSize = 14; //验证码字体大小 static char[] Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); //字符集 //画刷 static Brush[] BrushItems = new Brush[]{ Brushes.OliveDrab, Brushes.ForestGreen, Brushes.DarkCyan, Brushes.LightSlateGray, Brushes.RoyalBlue, Brushes.SlateBlue, Brushes.DarkViolet, Brushes.MediumVioletRed, Brushes.IndianRed, Brushes.Firebrick, Brushes.Chocolate, Brushes.Peru, Brushes.Goldenrod }; //字体 static string[] FontItems = new string[]{ "Arial", "Helvetica", "Geneva", "sans-serif", "Verdana" }; #endregion public void ProcessRequest (HttpContext context) { context.Response.ContentType = "image/jpeg"; context.Response.Cache.SetCacheability(HttpCacheability.NoCache); //不缓存图片 code = MakeCode(codeLength); //生成验证码 context.Session["VerificationCode"] = code; //将验证码存入Session Bitmap bmp = new Bitmap(width, height); Graphics g = Graphics.FromImage(bmp); DrawBackground(g); //绘制背景 Font font = MakeFont(); Brush brush = MakeBrush(); g.DrawString(code, font, brush, 3, 3); //绘制验证码字符串 DrawStain(bmp,0.08); //绘制噪声点 bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg); } public bool IsReusable { get { return false; } } /// <summary> /// 生成指定位数的随机验证码字符串 /// </summary> /// <param name="length">验证码长度</param> /// <returns>验证码字符串</returns> private string MakeCode(int length) { StringBuilder s = new StringBuilder(); Random r = new Random(); //生成随机字符串 for (int i = 0; i < length; ++i) { int index = r.Next(Chars.Length); s.Append(Chars[index]); } return s.ToString(); } /// <summary> /// 绘制图片背景 /// </summary> /// <param name="g"></param> private void DrawBackground(Graphics g) { g.Clear(Color.White); } /// <summary> /// 在位图中绘制指定比例的噪声点 /// </summary> /// <param name="bmp"></param> /// <param name="percentage">噪声点所占百分比</param> private void DrawStain(Bitmap bmp, double percentage) { int width = bmp.Width; int height = bmp.Height; int n = Convert.ToInt32(width * height * percentage); Random r = new Random(); //随机颜色 int red = r.Next(255); int green = r.Next(255); int blue = r.Next(255); Color color = Color.FromArgb(red,green,blue); for(int i=0;i<n;++i) { //随机坐标 int x = r.Next(1,width); int y = r.Next(1,height); bmp.SetPixel(x, y, color); } } /// <summary> /// 生成随机字体格式(字体、字号、字形) /// </summary> /// <returns></returns> private Font MakeFont() { Random r = new Random(); int i = r.Next(FontItems.Length); string familyName =FontItems[i]; //字体 FontStyle fontStyle = GetFontStyle(r.Next(0,2)); //字形 return new Font(familyName, fontSize, fontStyle); } /// <summary> /// 取得字体样式 /// </summary> /// <param name="index">索引,取值0-2</param> /// <returns></returns> private FontStyle GetFontStyle(int index) { switch (index) { case 0: return FontStyle.Bold; case 1: return FontStyle.Italic; default: return FontStyle.Regular; } } /// <summary> /// 生成随机画刷 /// </summary> /// <returns></returns> private Brush MakeBrush() { Random r = new Random(); int i = r.Next(BrushItems.Length); return BrushItems[i]; } }
生成的验证码存入Session,验证时判断一下即可。
使用时可以用img:
<img alt="验证码" id="imgCode" src="VerificationCode.ashx" onclick="this.src='VerificationCode.ashx?tmp='+new Date().getTime().toString(36);" title="看不清楚,换一张" />
这样可以实现点击图片,刷新验证码的功能。
相关文章推荐
- asp.net写验证码
- ASP.NET生成n位不同的验证码
- ASP.net 验证码(C#)
- asp.net生成验证码
- ASP.NET生成图形验证码的方法详解
- 由12306动态验证码想到的ASP.NET实现动态GIF验证码(附源码)
- ASP.NET MVC实现网站验证码功能
- ASP.NET——验证码的制作
- 彩色的ASP.NET验证码组件[源码]
- 【转】ASP.NET中文验证码详解
- asp.net扩展Login控件,添加图文验证码
- 在ASP.NET下实现数字和字符相混合的验证码
- ASP.Net实现验证码
- asp.net发送手机验证码
- ASP。NET验证码--视频学ASP.NET
- ASP.NET生成验证码的三种形式【附源码下载】
- asp.net 验证码
- ASP.NET实现数字和字符相混合的验证码
- 数学运算表达式形式的验证码 C# Asp.Net
- ASP.NET网站发布到IIS后验证码不能显示与IIS模式