第一步,花验证码 纯数字验证码,包含干扰点,无线
1 /// <summary>
2 /// ValidateCode 的摘要说明
3 /// </summary>
4 public class ValidateCode : IHttpHandler,IRequiresSessionState
5 {
6 HttpContext context;//新建
7 public void ProcessRequest(HttpContext context1)
8 {
9 this.context = context1;//一个获取 一个新建 实现刷新
10 CreateCheckCodeImage(GenreateCheckCode());//生成验证码
11 }
12 /// <summary>
13 /// 生成验证码文本
14 /// </summary>
15 /// <returns></returns>
16 private string GenreateCheckCode()
17 {
18 int number;
19 char code;
20 string checkCode = string.Empty;
21
22 System.Random random = new Random();
23 for (int i = 0; i < 5; i++)
24 {
25 number = random.Next();
26 if(number%2==0)
27 code=(char)('0'+(char)(number%10));
28 else
code=(char)('0'+(char)(number%10));
//code = (char)('A' + (char)(number % 26));
30 checkCode += code.ToString();
31 }
32 context.Session.Add("vCode", checkCode);
33 return checkCode;
34 }
35
36 private void CreateCheckCodeImage(string checkCode)
37 {
38 if (checkCode == null || checkCode.Trim() == string.Empty)
39 return;
40
41 System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
42 Graphics g = Graphics.FromImage(image);
43
44 try
45 {
46 //生成随机生成器
47 Random random = new Random();
48 //清空图片背景
49 g.Clear(Color.White);
50 //画图片的背景噪音线
51 for (int i = 0; i < 25; i++)
52 {
53 int x1 = random.Next(image.Width);
54 int x2 = random.Next(image.Width);
55 int y1 = random.Next(image.Height);
56 int y2 = random.Next(image.Height);
57
58 g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
59
60 }
61 Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold |
62 System.Drawing.FontStyle.Italic));
63 System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(
64 new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
65 g.DrawString(checkCode, font, brush, 2, 2);
66 //画图片的前景噪音点
67 for (int i = 0; i < 100; i++)
68 {
69 int x = random.Next(image.Width);
70 int y = random.Next(image.Height);
71
72 image.SetPixel(x, y, Color.FromArgb(random.Next()));
73
74
75 }
76 //画图片的边框线
77 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
78
79 System.IO.MemoryStream ms = new System.IO.MemoryStream();
80 image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
81 context.Response.ClearContent();
82 context.Response.ContentType = "image/Gif";
83 context.Response.BinaryWrite(ms.ToArray());
84 }
85 finally
86 {
87 g.Dispose();
88 image.Dispose();
89 }
90 }
91 public bool IsReusable
92 {
93 get
94 {
95 return false;
96 }
97 }
98 }
第二步 验证码校验
1 /// <summary>
2 /// 完成验证码的校验
3 /// </summary>
4 /// <returns></returns>
5 public static bool CheckValidateCode()
6 {
7 HttpContext context = HttpContext.Current;
8 bool isSucess = false;
9 if (context.Session["vCode"] != null)
10 {
11 string code = context.Request["txtCode"];//文本框输入的值
12 string sysCode = context.Session["vCode"].ToString();
13 //忽略大小写
14 if (sysCode.Equals(code, StringComparison.InvariantCultureIgnoreCase))
15 {
16 //context.Session["vCode"] = null;
17 isSucess = true;
18 }
19 }
20 return isSucess;
21 }