生成验证码

验证码生成步骤:

1、根据制定的验证码长度,随机生成验证码字符串。(此处需要注意“随机“的定义)

2、根据生成的验证码字符串绘制对应的验证码图形

具体代码如下:

 1   /// <summary>
 2     /// Validate code manager
 3     /// </summary>
 4     public class ValidateCodeManager
 5     {
 6         /// <summary>
 7         /// 生成验证码图片
 8         /// </summary>
 9         /// <param name="length"></param>
10         /// <returns></returns>
11         public byte[] GenerateValidateCodeImg(int length)
12         {
13             string validateCode = GenerateString(length);
14             byte[] data = GenerateValidateGraphic(validateCode);
15             return data;
16         }
17 
18         /// <summary>
19         /// 生成随机的字符串
20         /// </summary>
21         /// <param name="length"></param>
22         /// <returns></returns>
23         private string GenerateString(int length)
24         {
25             char[] chars = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
26             string validateCode = "";
27             int temp = 1;
28             Random rand = new Random();
29             for (int i = 0; i < length; i++)
30             {
31                 if (i > 0)
32                 {
33                     rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
34                 }
35                 int t = rand.Next(36);
36                 validateCode += chars[t];
37                 if (temp == t)
38                 {
39                     temp += 10;
40                 }
41                 else
42                 {
43                     temp = t;
44                 }
45 
46             }
47             return validateCode;
48         }
49 
50         /// <summary>
51         /// 创建验证码图片
52         /// </summary>
53         /// <param name="validateCode"></param>
54         /// <returns></returns>
55         private byte[] GenerateValidateGraphic(string validateCode)
56         {
57             Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), 28);
58             Graphics g = Graphics.FromImage(image);
59             try
60             {
61                 //生成随机生成器
62                 Random random = new Random();
63                 //清空图片背景色
64                 g.Clear(Color.White);
65                 //画图片的干扰线
66                 for (int i = 0; i < 30; i++)
67                 {
68                     int x1 = random.Next(image.Width);
69                     int x2 = random.Next(image.Width);
70                     int y1 = random.Next(image.Height);
71                     int y2 = random.Next(image.Height);
72                     g.DrawLine(new Pen(Color.Silver), x1, x2, y1, y2);
73                 }
74                 Font font = new Font("Arial", 13, (FontStyle.Bold | FontStyle.Italic));
75                 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
76                 g.DrawString(validateCode, font, brush, 3, 2);
77 
78                 //画图片的前景干扰线
79                 for (int i = 0; i < 100; i++)
80                 {
81                     int x = random.Next(image.Width);
82                     int y = random.Next(image.Height);
83                     image.SetPixel(x, y, Color.FromArgb(random.Next()));
84                 }
85                 //画图片的边框线
86                 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
87 
88                 //图片数据
89                 MemoryStream stream = new MemoryStream();
90                 image.Save(stream, ImageFormat.Jpeg);
91                 return stream.ToArray();
92             }
93             finally
94             {
95                 g.Dispose();
96                 image.Dispose();
97             }
98         }
99     }

 

调用:

1  private void btnValidateCode_Click(object sender, EventArgs e)
2         {
3             ValidateCodeManager validateCodeManager = new ValidateCodeManager();
4             byte[] datas = validateCodeManager.GenerateValidateCodeImg(5);
5             MemoryStream ms = new MemoryStream(datas);
6             this.pbValidateCode.Image = Image.FromStream(ms);
7         }

 

posted on 2018-03-22 23:28  john_yong  阅读(387)  评论(0编辑  收藏  举报

导航