Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)delvpublished in(发表于) 2014/1/16 9:27:54 Asp.Net,动态生成验证码_[Asp.Net教程]
我们在设计用户登录模块时,经常会用到验证码,可以有效地防止黑客软件的恶意破解,现公开我常用的验证码的源代码,生成效果如图: 使用方法: 1、在Web项目中添加一个类,如“CreateImage.cs”,然后将我公布的源代码Copy进去; 2、再新建一个Web窗体,如“Image.aspx”,在Page_Load中加入代码 “CreateImage.DrawImage ();”当然别忘了加上对类的引用哦!! 3、在页面的合适位置上(你想放验证码的位置)上加上如下javascript代码就OK 了,
源代码如下: 复制C#代码保存代码/// /// 验证码模块/// public class CreateImage{public static void DrawImage(){CreateImage img = new CreateImage();HttpContext.Current.Session["CheckCode"] = img.RndNum(4);img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());}
/// /// 生成验证图片/// /// 验证字符private void CreateImages(string checkCode){int iwidth = (int) (checkCode.Length * 13);System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);Graphics g = Graphics.FromImage(image);g.Clear(Color.White);//定义颜色Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };//定义字体 string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };Random rand = new Random();//随机输出噪点for (int i = 0; i < 50; i++){int x = rand.Next(image.Width);int y = rand.Next(image.Height);g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);}
//输出不同字体和颜色的验证码字符for (int i = 0; i < checkCode.Length; i++){int cindex = rand.Next(7);int findex = rand.Next(5);
Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);Brush b = new System.Drawing.SolidBrush(c[cindex]);int ii = 4;if ((i + 1) % 2 == 0){ii = 2;}g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);}//画一个边框g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
//输出到浏览器System.IO.MemoryStream ms = new System.IO.MemoryStream();image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);HttpContext.Current.Response.ClearContent();//Response.ClearContent();HttpContext.Current.Response.ContentType = "image/Jpeg";HttpContext.Current.Response.BinaryWrite(ms.ToArray());g.Dispose();image.Dispose();}
/// /// 生成随机的字母/// /// 生成字母的个数/// stringprivate string RndNum(int VcodeNum){string Vchar = "0,1,2,3,4,5,6,7,8,9";string[] VcArray = Vchar.Split(',');string VNum = ""; //由于字符串很短,就不用StringBuilder了int temp = -1; //记录上次随机数值,尽量避免生产几个一样的随机数
//采用一个简单的算法以保证生成随机数的不同Random rand = new Random();for (int i = 1; i < VcodeNum + 1; i++){if (temp != -1){rand = new Random(i * temp * unchecked((int) DateTime.Now.Ticks));}int t = rand.Next(VcArray.Length);if (temp != -1 && temp == t){return RndNum(VcodeNum);}temp = t;VNum += VcArray[t];}return VNum;}}
附件: AspNetCheckCodeExample.rar
来源: 阿良.NET
赞