“字母跟数字混合的验证码技术”:
验证码技术是网站开发过程中比较重要的技术,可以防止非法人员利用注册机或者登陆工具来攻击我们的网站。废话少说,切入正题。主要思路是:引用Using System.Drawing命名空间,利用Graphics的FromImage方法创建一个画布,同时设置画布的宽和高,然后通过Graphics类的DrawString方法随机生成的字符串绘制到画布中,绘制验证码的同时,在画布中利用SetPixel方法绘制一些色点,从而防止非法人员利用机器人来进行登陆。当我们绘制验证码完毕后,在需要验证码的页面中利用Image空间将其显示出来,Image控件显示验证码的HTML源码设置如下:
注意:当然加入src属性时程序会提示src不是元素Image的有效属性,这不影响程序的执行。由于验证码存放在客户端机器的COOKIE中,因此在调用的时候可以将文本框中的数据和COOKIE中的数据进行对照。从客户端的机器中取出COOKIE值如下代码:HttpCOOKIE COOKIE=Request.COOKIEs["CheckCode"];
举个例子:主要有:输入验证码txtCode,显示验证码Image1,提交/取消 btnOk/btnCancel主要代码如下:
(1)在绘制验证码之前,必须生成随机字符串。代码如下:
2 {
3 int number;
4 char code;
5 string checkCode = String.Empty;
6 Random random = new Random();
7 for (int i &#61; 0; i < 4; i&#43;&#43;)
8 {
9 number &#61; random.Next();
10
11 if (number % 2 &#61;&#61; 0)
12 code &#61; (char)(&#39;0&#39; &#43; (char)(number % 10));
13 else
14 code &#61; (char)(&#39;A&#39; &#43; (char)(number % 26));
15
16 checkCode &#43;&#61; code.ToString();
17 }
18
19 Response.COOKIEs.Add(new HttpCOOKIE("CheckCode", checkCode));
20 return checkCode;
21 }
22
23
代码比较简单我就不在解释。
(2)字符串生成后&#xff0c;接下来就是将该字符串绘制成图片显示出来。代码如下&#xff1a;
2 {
3 if (checkCode &#61;&#61; null || checkCode.Trim() &#61;&#61; String.Empty)
4 return;
5 System.Drawing.Bitmap image &#61; new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22); Graphics g &#61; Graphics.FromImage(image);
6 try
7 {
8 //生成随机生成器
9 Random random &#61; new Random();
10 //清空图片背景色
11 g.Clear(Color.White);
12 //画图片的背景噪音线
13 for (int i &#61; 0; i < 2; i&#43;&#43;)
14 {
15 int x1 &#61; random.Next(image.Width);
16 int x2 &#61; random.Next(image.Width);
17 int y1 &#61; random.Next(image.Height);
18 int y2 &#61; random.Next(image.Height);
19 g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
20 }
21
22 Font font &#61; new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));
23 System.Drawing.Drawing2D.LinearGradientBrush brush &#61; new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
24 g.DrawString(checkCode, font, brush, 2, 2);
25 //画图片的前景噪音点
26 for (int i &#61; 0; i < 100; i&#43;&#43;)
27 {
28 int x &#61; random.Next(image.Width);
29 int y &#61; random.Next(image.Height);
30 image.SetPixel(x, y, Color.FromArgb(random.Next()));
31 }
32
33 //画图片的边框线
34 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
35 System.IO.MemoryStream ms &#61; new System.IO.MemoryStream();
36 image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
37 Response.ClearContent();
38 Response.ContentType &#61; "image/Gif";
39 Response.BinaryWrite(ms.ToArray());
40 }
41 finally
42 {
43 g.Dispose();
44 image.Dispose();
45 }
46 }
47
48
以上带都是我运行过的&#xff0c;同时参照MSDN文档&#xff0c;大家放心使用。如有错误请联系我QQ:1264373&#xff0c;谢谢!
最好引用比较的代码是&#xff1a;
2 {
3 HttpCOOKIE COOKIE &#61; Request.COOKIEs["CheckCode"];
4 if (COOKIE.Value &#61;&#61; this.txtCode.Text.Trim())
5 {
6 Response.Write("");
7 }
8 else
9 {
10 Response.Write("");
11 }
12 }