1
/* Copyright all(c) 2005 ZhongFeng, http://blog.csdn.net/SW515 */
2
public class ValidateCode : System.Web.UI.Page
3
{
4
private void Page_Load(object sender, System.EventArgs e)
5
{
6
this.CreateCheckCodeImage(GenerateCheckCode());
7
}
8
Web 窗体设计器生成的代码
27
private string GenerateCheckCode()
28
{
29
int number;
30
char code;
31
string checkCode = String.Empty;
32
System.Random random = new Random();
33
for(int i=0; i<5; i++)
34
{
35
number = random.Next();
36
if(number % 2 == 0)
37
code = (char)('0' + (char)(number % 10));
38
else
39
code = (char)('A' + (char)(number % 26));
40
checkCode += code.ToString();
41
}
42
Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
43
return checkCode;
44
}
45
private void CreateCheckCodeImage(string checkCode)
46
{
47
if(checkCode == null || checkCode.Trim() == String.Empty)
48
return;
49
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
50
Graphics g = Graphics.FromImage(image);
51
try
52
{
53
//生成随机生成器
54
Random random = new Random();
55
//清空图片背景色
56
g.Clear(Color.White);
57
//画图片的背景噪音线
58
for(int i=0; i<25; i++)
59
{
60
int x1 = random.Next(image.Width);
61
int x2 = random.Next(image.Width);
62
int y1 = random.Next(image.Height);
63
int y2 = random.Next(image.Height);
64
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
65
}
66
Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
67
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
68
g.DrawString(checkCode, font, brush, 2, 2);
69
//画图片的前景噪音点
70
for(int i=0; i<100; i++)
71
{
72
int x = random.Next(image.Width);
73
int y = random.Next(image.Height);
74
image.SetPixel(x, y, Color.FromArgb(random.Next()));
75
}
76
//画图片的边框线
77
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
78
System.IO.MemoryStream ms = new System.IO.MemoryStream();
79
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
80
Response.ClearContent();
81
Response.ContentType = "image/Gif";
82
Response.BinaryWrite(ms.ToArray());
83
}
84
finally
85
{
86
g.Dispose();
87
image.Dispose();
88
}
89
}
90
}
91
92
93
94
假如以上验证码生成器页面名为:CheckCode.aspx,那么在登录页面中使用“<IMG>” 这个 HTML 元素来显示生成的验证码图片:<IMG src="CheckCode.aspx">
95
在登录页面的登录按钮的处理事件中使用以下代码判断验证码:
96
97
private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)
98
{
99
if(Request.Cookies["CheckCode"] == null)
100
{
101
lblMessage.Text = "您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。";
102
lblMessage.Visible = true;
103
return;
104
}
105
if(String.Compare(Request.Cookies["CheckCode"].Value, txtCheckCode.Text, true) != 0)
106
{
107
lblMessage.Text = "验证码错误,请输入正确的验证码。";
108
lblMessage.Visible = true;
109
return;
110
}
111
112
/***** 其他代码 *****/
113
114
}
/* Copyright all(c) 2005 ZhongFeng, http://blog.csdn.net/SW515 */2
public class ValidateCode : System.Web.UI.Page3
{4
private void Page_Load(object sender, System.EventArgs e)5
{6
this.CreateCheckCodeImage(GenerateCheckCode());7
}8
Web 窗体设计器生成的代码27
private string GenerateCheckCode()28
{29
int number;30
char code;31
string checkCode = String.Empty;32
System.Random random = new Random();33
for(int i=0; i<5; i++)34
{35
number = random.Next();36
if(number % 2 == 0)37
code = (char)('0' + (char)(number % 10));38
else39
code = (char)('A' + (char)(number % 26));40
checkCode += code.ToString();41
}42
Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));43
return checkCode;44
}45
private void CreateCheckCodeImage(string checkCode)46
{47
if(checkCode == null || checkCode.Trim() == String.Empty)48
return;49
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);50
Graphics g = Graphics.FromImage(image);51
try52
{53
//生成随机生成器54
Random random = new Random();55
//清空图片背景色56
g.Clear(Color.White);57
//画图片的背景噪音线58
for(int i=0; i<25; i++)59
{60
int x1 = random.Next(image.Width);61
int x2 = random.Next(image.Width);62
int y1 = random.Next(image.Height);63
int y2 = random.Next(image.Height);64
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);65
}66
Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));67
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);68
g.DrawString(checkCode, font, brush, 2, 2);69
//画图片的前景噪音点70
for(int i=0; i<100; i++)71
{72
int x = random.Next(image.Width);73
int y = random.Next(image.Height);74
image.SetPixel(x, y, Color.FromArgb(random.Next()));75
}76
//画图片的边框线77
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);78
System.IO.MemoryStream ms = new System.IO.MemoryStream();79
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);80
Response.ClearContent();81
Response.ContentType = "image/Gif";82
Response.BinaryWrite(ms.ToArray());83
}84
finally85
{86
g.Dispose();87
image.Dispose();88
}89
}90
}91

92
93

94
假如以上验证码生成器页面名为:CheckCode.aspx,那么在登录页面中使用“<IMG>” 这个 HTML 元素来显示生成的验证码图片:<IMG src="CheckCode.aspx">95
在登录页面的登录按钮的处理事件中使用以下代码判断验证码:96

97
private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)98
{99
if(Request.Cookies["CheckCode"] == null)100
{101
lblMessage.Text = "您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。";102
lblMessage.Visible = true;103
return;104
} 105
if(String.Compare(Request.Cookies["CheckCode"].Value, txtCheckCode.Text, true) != 0)106
{107
lblMessage.Text = "验证码错误,请输入正确的验证码。";108
lblMessage.Visible = true;109
return;110
}111

112
/***** 其他代码 *****/113

114
}


浙公网安备 33010602011771号