1 using System;
2 using System.Collections.Generic;
3 using System.Web;
4 using System.Web.UI;
5 using System.Web.UI.WebControls;
6 using System.Drawing;
7 using Maticsoft.Common;
8 namespace Maticsoft.Web
9 {
10 public partial class ValidateCode : System.Web.UI.Page
11 {
12 private static char[] constant = //声明一个静态的字符数组,验证码从这里面随机的取
13 {
14 '1','2','3','4','5','6','7','8','9',
15 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','p','q','r','s','t','u','v','w','x','y','z',
16 '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'
17 };
18 private void Page_Load(object sender, System.EventArgs e)
19 {
20 string checkCode = CreateNumber(4);
21 // Session["validateCode"] = checkCode.ToLower()
22 Common_Sesson.Add("validateCode", checkCode.ToLower());
23 CreateCheckCodeImage(checkCode);
24 }
25
26 #region 画出图片并显示到调用这个方法的画布上
27 private void CreateCheckCodeImage(string code)
28 {
29 var imageCode = new System.Drawing.Bitmap((int)Math.Ceiling((code.Length * 12.5)), 23); //定义图片的宽度和高度
30 var g = Graphics.FromImage(imageCode); //加载图片到画布上
31
32 HttpContext.Current.Session["Code_Char"] = code; //将验证码写入到session中实现验证
33
34 try
35 {
36 var random = new Random();
37 g.Clear(Color.White); //清空图片背景色
38
39 //画图片的背景噪音线
40 for (int i = 0; i < 25; i++)
41 {
42 var x1 = random.Next(imageCode.Width);
43 var x2 = random.Next(imageCode.Width);
44 var y1 = random.Next(imageCode.Height);
45 var y2 = random.Next(imageCode.Height);
46
47 g.DrawLine(new Pen(Color.Silver), new Point(x1, y1), new Point(x2, y2));
48 }
49
50 var font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic);
51 var brush = new System.Drawing.Drawing2D.LinearGradientBrush(
52 new Rectangle(0, 0, imageCode.Width, imageCode.Height),
53 Color.Blue, Color.DarkRed, 1.2F, true);
54 g.DrawString(code, font, brush, 2, 2);
55
56 //画图片的前景噪音点
57 for (int i = 0; i < 100; i++)
58 {
59 var x = random.Next(imageCode.Width);
60 var y = random.Next(imageCode.Height);
61 imageCode.SetPixel(x, y, Color.FromArgb(random.Next()));
62 }
63
64 //画图片的边框线
65 g.DrawRectangle(new Pen(Color.Silver), 0, 0, imageCode.Width - 1, imageCode.Height - 1);
66 var ms = new System.IO.MemoryStream();
67 imageCode.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
68
69 HttpContext.Current.Response.ClearContent();
70 HttpContext.Current.Response.ContentType = "image/jpg";
71 HttpContext.Current.Response.BinaryWrite(ms.ToArray());
72 }
73 finally
74 {
75 g.Dispose();
76 imageCode.Dispose();
77 }
78 }
79 #endregion
80 #region 生成0——60的随机数
81 private static string CreateNumber(int n) //n表示产生字符串的长度
82 {
83 string str = "";
84 System.Text.StringBuilder newRandom = new System.Text.StringBuilder(60);
85 Random rd = new Random();
86 while (n-- > 0)
87 {
88 str = str + constant[rd.Next(60)];
89 }
90 return str;
91 }
92 #endregion
93
94
95 }
96 }