您的位置:首页 > 编程语言 > C#

C#生成数字验证码

2017-04-19 16:41 381 查看
1      context.Response.ContentType = "text/plain";
2
3             //创建一个 位图:确定高度宽度
4             //位图上创建画布
5             //画布上画一个字符串
6
7             ValidateImagCode validateImgCode = new ValidateImagCode();
8
9             //生成验证码数字
10             string strCode = validateImgCode.CreateValidateCode(4);
11
12             //创建画布写入验证码
13             validateImgCode.CreateValidateGraphic(strCode, context);

1
public class ValidateImagCode
2     {
3
4         /// <summary>
5         /// 验证码的最大长度
6         /// </summary>
7         public int MaxLength
8         {
9             get { return 10; }
10         }
11         /// <summary>
12         /// 验证码的最小长度
13         /// </summary>
14         public int MinLength
15         {
16             get { return 1; }
17         }
18         /// <summary>
19         /// 生成验证码
20         /// </summary>
21         /// <param name="length">指定验证码的长度</param>
22         /// <returns></returns>
23         public string CreateValidateCode(int length)
24         {
25             int[] randMembers = new int[length];
26             int[] validateNums = new int[length];
27             string validateNumberStr = "";
28             //生成起始序列值
29             int seekSeek = unchecked((int)DateTime.Now.Ticks);
30             Random seekRand = new Random(seekSeek);
31             int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
32             int[] seeks = new int[length];
33             for (int i = 0; i < length; i++)
34             {
35                 beginSeek += 10000;
36                 seeks[i] = beginSeek;
37             }
38             //生成随机数字
39             for (int i = 0; i < length; i++)
40             {
41                 Random rand = new Random(seeks[i]);
42                 int pownum = 1 * (int)Math.Pow(10, length);
43                 randMembers[i] = rand.Next(pownum, Int32.MaxValue);
44             }
45             //抽取随机数字
46             for (int i = 0; i < length; i++)
47             {
48                 string numStr = randMembers[i].ToString();
49                 int numLength = numStr.Length;
50                 Random rand = new Random();
51                 int numPosition = rand.Next(0, numLength - 1);
52                 validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
53             }
54             //生成验证码
55             for (int i = 0; i < length; i++)
56             {
57                 validateNumberStr += validateNums[i].ToString();
58             }
59             return validateNumberStr;
60         }
61         /// <summary>
62         /// 创建验证码的图片
63         /// </summary>
64         /// <param name="containsPage">要输出到的page对象</param>
65         /// <param name="validateNum">验证码</param>
66         public void CreateValidateGraphic(string validateCode, HttpContext context )
67         {
68             Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
69             Graphics g = Graphics.FromImage(image);
70             try
71             {
72                 //生成随机生成器
73                 Random random = new Random();
74                 //清空图片背景色
75                 g.Clear(Color.White);
76                 //画图片的干扰线
77                 for (int i = 0; i < 25; i++)
78                 {
79                     int x1 = random.Next(image.Width);
80                     int x2 = random.Next(image.Width);
81                     int y1 = random.Next(image.Height);
82                     int y2 = random.Next(image.Height);
83                     g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
84                 }
85                 Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
86                 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
87                  Color.Blue, Color.DarkRed, 1.2f, true);
88                 g.DrawString(validateCode, font, brush, 3, 2);
89                 //画图片的前景干扰点
90                 for (int i = 0; i < 100; i++)
91                 {
92                     int x = random.Next(image.Width);
93                     int y = random.Next(image.Height);
94                     image.SetPixel(x, y, Color.FromArgb(random.Next()));
95                 }
96                 //画图片的边框线
97                 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
98                 //保存图片数据
99                 MemoryStream stream = new MemoryStream();
100                 image.Save(stream, ImageFormat.Jpeg);
101                 //输出图片流
102
103                 context.Response.Clear();//把之前Response的字节数组清空。
104                 context.Response.ContentType = "image/jpeg";
105                 context.Response.BinaryWrite(stream.ToArray());
106             }
107             finally
108             {
109                 g.Dispose();
110                 image.Dispose();
111             }
112         }
113         /// <summary>
114         /// 得到验证码图片的长度
115         /// </summary>
116         /// <param name="validateNumLength">验证码的长度</param>
117         /// <returns></returns>
118         public static int GetImageWidth(int validateNumLength)
119         {
120             return (int)(validateNumLength * 12.0);
121         }
122         /// <summary>
123         /// 得到验证码的高度
124         /// </summary>
125         /// <returns></returns>
126         public static double GetImageHeight()
127         {
128             return 22.5;
129         }
130     }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: