1 public class ValidateCode
2 {
3 /// <summary>
4 /// 生成验证码
5 /// </summary>
6 /// <param name="length">指定验证码的长度</param>
7 /// <returns></returns>
8 public string CreateValidateCode(int length)
9 {
10 int[] randMembers = new int[length];
11 int[] validateNums = new int[length];
12 string validateNumberStr = "";
13 //生成起始序列值
14 int seekSeek = unchecked((int)DateTime.Now.Ticks);
15 Random seekRand = new Random(seekSeek);
16 int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
17 int[] seeks = new int[length];
18 for (int i = 0; i < length; i++)
19 {
20 beginSeek += 10000;
21 seeks[i] = beginSeek;
22 }
23 //生成随机数字
24 for (int i = 0; i < length; i++)
25 {
26 Random rand = new Random(seeks[i]);
27 int pownum = 1 * (int)Math.Pow(10, length);
28 randMembers[i] = rand.Next(pownum, Int32.MaxValue);
29 }
30 //抽取随机数字
31 for (int i = 0; i < length; i++)
32 {
33 string numStr = randMembers[i].ToString();
34 int numLength = numStr.Length;
35 Random rand = new Random();
36 int numPosition = rand.Next(0, numLength - 1);
37 validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
38 }
39 //生成验证码
40 for (int i = 0; i < length; i++)
41 {
42 validateNumberStr += validateNums[i].ToString();
43 }
44 return validateNumberStr;
45 }
46 /// <summary>
47 /// 创建验证码的图片
48 /// </summary>
49 /// <param name="containsPage">要输出到的page对象</param>
50 /// <param name="validateNum">验证码</param>
51 public byte[] CreateValidateGraphic(string validateCode)
52 {
53 Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
54 Graphics g = Graphics.FromImage(image);
55 try
56 {
57 //生成随机生成器
58 Random random = new Random();
59 //清空图片背景色
60 g.Clear(Color.White);
61 //画图片的干扰线
62 for (int i = 0; i < 25; i++)
63 {
64 int x1 = random.Next(image.Width);
65 int x2 = random.Next(image.Width);
66 int y1 = random.Next(image.Height);
67 int y2 = random.Next(image.Height);
68 g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
69 }
70 Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
71 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
72 Color.Blue, Color.DarkRed, 1.2f, true);
73 g.DrawString(validateCode, font, brush, 3, 2);
74 //画图片的前景干扰点
75 for (int i = 0; i < 100; i++)
76 {
77 int x = random.Next(image.Width);
78 int y = random.Next(image.Height);
79 image.SetPixel(x, y, Color.FromArgb(random.Next()));
80 }
81 //画图片的边框线
82 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
83 //保存图片数据
84 MemoryStream stream = new MemoryStream();
85 image.Save(stream, ImageFormat.Jpeg);
86 //输出图片流
87 return stream.ToArray();
88 }
89 finally
90 {
91 g.Dispose();
92 image.Dispose();
93 }
94 }
95 }