以下内容来自网络,我个人加于整理。测试过的,好用。
生成验证码:
ValidateCode.aspx.cs文件
可以如下方法引用:
ValidateTest.aspx.cs文件
生成验证码:
ValidateCode.aspx.cs文件
1
private void Page_Load(object sender, System.EventArgs e)
2
{
3
string VNum=RndNum(4);//这里的数字4代表显示的是4位的验证字符串!
4
Session["VNum"]=VNum; //创建验证码的Session
5
GetValidateCode(VNum);//生成图像
6
}
7
8
9
/// <summary>
10
/// 生成图像
11
/// </summary>
12
/// <param name="VNum"></param>
13
private void GetValidateCode(string VNum)
14
{
15
int Gwidth=(int)(VNum.Length * 13);
16
//Gwidth为图片宽度,根据字符长度自动更改图片宽度
17
System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gwidth,25);
18
Graphics g = Graphics.FromImage(Img);
19
g.DrawString(VNum,new System.Drawing.Font("Arial",12),new System.Drawing.SolidBrush(Color.Blue),3,3);
20
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
21
System.IO.MemoryStream ms=new System.IO.MemoryStream();
22
Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
23
Response.ClearContent(); //需要输出图象信息 要修改HTTP头
24
Response.ContentType="image/Png";
25
Response.BinaryWrite(ms.ToArray());
26
g.Dispose();
27
Img.Dispose();
28
Response.End();
29
}
30
31
32
/// <summary>
33
/// 生成随机数,从Vchar数组中随机抽取字符.
34
/// 字母区分大小写
35
/// </summary>
36
/// <param name="VcodeNum"></param>
37
/// <returns></returns>
38
public string RndNum(int VcodeNum)
39
{
40
string Vchar = "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,W,X,Y,Z" ;
41
42
string[] VcArray = Vchar.Split(',') ;
43
string VNum = "" ;
44
int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数
45
46
//采用一个简单的算法以保证生成随机数的不同
47
Random rand =new Random();
48
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
49
{
50
if ( temp != -1)
51
{
52
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
53
}
54
int t=rand.Next(35);
55
if (temp != -1 && temp == t)
56
{
57
return RndNum( VcodeNum );
58
}
59
temp = t ;
60
VNum += VcArray[t];
61
}
62
return VNum ;
63
}
private void Page_Load(object sender, System.EventArgs e)2
{3
string VNum=RndNum(4);//这里的数字4代表显示的是4位的验证字符串! 4
Session["VNum"]=VNum; //创建验证码的Session 5
GetValidateCode(VNum);//生成图像6
}7

8

9
/// <summary>10
/// 生成图像11
/// </summary>12
/// <param name="VNum"></param>13
private void GetValidateCode(string VNum) 14
{ 15
int Gwidth=(int)(VNum.Length * 13); 16
//Gwidth为图片宽度,根据字符长度自动更改图片宽度 17
System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gwidth,25); 18
Graphics g = Graphics.FromImage(Img); 19
g.DrawString(VNum,new System.Drawing.Font("Arial",12),new System.Drawing.SolidBrush(Color.Blue),3,3); 20
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y) 21
System.IO.MemoryStream ms=new System.IO.MemoryStream(); 22
Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png); 23
Response.ClearContent(); //需要输出图象信息 要修改HTTP头 24
Response.ContentType="image/Png"; 25
Response.BinaryWrite(ms.ToArray()); 26
g.Dispose(); 27
Img.Dispose(); 28
Response.End(); 29
} 30

31

32
/// <summary>33
/// 生成随机数,从Vchar数组中随机抽取字符.34
/// 字母区分大小写35
/// </summary>36
/// <param name="VcodeNum"></param>37
/// <returns></returns>38
public string RndNum(int VcodeNum) 39
{ 40
string Vchar = "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,W,X,Y,Z" ; 41
42
string[] VcArray = Vchar.Split(',') ; 43
string VNum = "" ;44
int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数 45

46
//采用一个简单的算法以保证生成随机数的不同 47
Random rand =new Random(); 48
for ( int i = 1 ; i < VcodeNum+1 ; i++ ) 49
{ 50
if ( temp != -1) 51
{ 52
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks)); 53
}54
int t=rand.Next(35); 55
if (temp != -1 && temp == t) 56
{ 57
return RndNum( VcodeNum ); 58
} 59
temp = t ; 60
VNum += VcArray[t]; 61
} 62
return VNum ; 63
} 可以如下方法引用:
ValidateTest.aspx.cs文件
1
private void Page_Load(object sender, System.EventArgs e)
2
{
3
if(!IsPostBack)
4
{
5
//设置Image控件的ImageUrl属性(ValidateCode.aspx生成验证码的页名)
6
this.Image1.ImageUrl = "ValidateCode.aspx";
7
}
8
}
9
10
//按钮事件
11
private void Button1_Click(object sender, System.EventArgs e)
12
{
13
if(this.TextBox1.Text == Session["VNum"].ToString())
14
{
15
Response.Write("验证码正确!");
16
}
17
else
18
{
19
Response.Write("验证码错误!");
20
}
21
}
22
private void Page_Load(object sender, System.EventArgs e)2
{3
if(!IsPostBack)4
{5
//设置Image控件的ImageUrl属性(ValidateCode.aspx生成验证码的页名)6
this.Image1.ImageUrl = "ValidateCode.aspx";7
}8
}9

10
//按钮事件11
private void Button1_Click(object sender, System.EventArgs e)12
{13
if(this.TextBox1.Text == Session["VNum"].ToString())14
{15
Response.Write("验证码正确!");16
}17
else18
{19
Response.Write("验证码错误!");20
}21
}22


浙公网安备 33010602011771号