net里各种验证码的实现文档格式.docx
《net里各种验证码的实现文档格式.docx》由会员分享,可在线阅读,更多相关《net里各种验证码的实现文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
stringcheckCode=string.Empty;
System.Randomrandom=newRandom();
for(inti=0;
i<
5;
i++)
number=random.Next();
if(number%2==0)
code=(char)('
0'
+(char)(number%10));
else
a'
+(char)(number%26));
checkCode+=code.ToString();
//response.cookies.add(newhttpcookie("
checkcode"
checkcode));
Session["
CheckCode"
]=checkCode;
returncheckCode;
privatevoidCreateCheckCodeImage(stringcheckCode)
if(checkCode==null||checkCode.Trim()==String.Empty)
return;
System.Drawing.Bitmapimage=
newSystem.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length*12.5)),22);
Graphicsg=Graphics.FromImage(image);
try
{Randomrandom=newRandom();
//生成随机生成器
g.Clear(Color.White);
25;
intx1=random.Next(image.Width);
intx2=random.Next(image.Width);
inty1=random.Next(image.Height);
inty2=random.Next(image.Height);
g.DrawLine(newPen(Color.Silver),x1,y1,x2,y2);
Fontfont=newSystem.Drawing.Font("
Arial"
12,(System.Drawing.FontStyle.Bold));
System.Drawing.Drawing2D.LinearGradientBrushbrush=newSystem.Drawing.Drawing2D.LinearGradientBrush(newRectangle(0,0,image.Width,image.Height),Color.Blue,Color.DarkRed,1.2f,true);
//System.Drawing.Drawing2D.LinearGradientBrushbrush=newSystem.Drawing.Drawing2D.LinearGradientBrush(newRectangle(0,0,image.Width,image.Height),Color.Blue,Color.Blue,1.0f,true);
g.DrawString(checkCode,font,brush,2,2);
//画图片的前景噪声点
100;
intx=random.Next(image.Width);
inty=random.Next(image.Height);
//image.setpixel(x,y,color.FromArgb(random.Next()));
image.SetPixel(x,y,Color.Yellow);
//画图片的边框线
g.DrawRectangle(newPen(Color.Silver),0,0,image.Width-1,image.Height-1);
System.IO.MemoryStreamms=newSystem.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType="
image/Gif"
;
Response.BinaryWrite(ms.ToArray());
finally
g.Dispose();
image.Dispose();
#region
protectedoverridevoidOnInit(EventArgse)
『InitializeComponent();
base.OnInit(e);
privatevoidInitializeComponent()
{this.Load+=newSystem.EventHandler(this.Page_Load);
#endregion
}
法2、
string[]str=newstring[4];
stringserverCode="
string[]a=newstring[61]{"
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"
V"
W"
X"
Y"
Z"
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"
};
Randomrandom=newRandom();
4;
intrd=random.Next(60);
str[i]=a[rd];
CreateCheckCodeImage(str);
foreach(stringsinstr)
serverCode+=s;
serverCode"
]=serverCode;
publicvoidCreateCheckCodeImage(string[]checkCode)
if(checkCode==null||checkCode.Length<
=0)
System.Drawing.Bitmapimage=newSystem.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length*32.5)),30);
System.Drawing.Graphicsg=Graphics.FromImage(image);
//清空图片背景色
//画图片的背景噪音线
20;
//定义颜色
Color[]c={Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//定义字体
string[]f={"
Verdana"
"
MicrosoftSansSerif"
ComicSansMS"
宋体"
};
for(intk=0;
k<
=checkCode.Length-1;
k++)
intcindex=random.Next(7);
intfindex=random.Next(5);
FontdrawFont=newFont(f[findex],16,(System.Drawing.FontStyle.Bold));
SolidBrushdrawBrush=newSolidBrush(c[cindex]);
floatx=5.0F;
floaty=0.0F;
floatwidth=20.0F;
floatheight=25.0F;
intsjx=random.Next(10);
intsjy=random.Next(image.Height-(int)height);
RectangleFdrawRect=newRectangleF(x+sjx+(k*25),y+sjy,width,height);
StringFormatdrawFormat=newStringFormat();
drawFormat.Alignment=StringAlignment.Center;
g.DrawString(checkCode[k],drawFont,drawBrush,drawRect,drawFormat);
//画图片的前景噪音点
image.SetPixel(x,y,Color.FromArgb(random.Next()));
在其他页面调用:
functionreloadcode(im){
document.getElementById("
Img"
).src="
验证码.aspx?
+newDate;
imgsrc="
验证码.aspx"
id="
onclick="
reloadcode(this)"
style="
width:
56px;
height:
28px"
/>
法3、
使用随机数方式,代码如下:
private
String
GetRandomint(int
codeCount)
{
Random
random
=
new
Random();
string
min
max
for
(int
i
0;
codeCount;
i++)
+="
max+="
}
return
(random.Next(Convert.ToInt32(min),Convert.ToInt32(max)).ToString());
使用随机组合方式,代码如下:
1.private
CreateRandomCode(int
2.{
3.
allChar
0,1,2,3,4,5,6,7,8,9"
4.
string[]
allCharArray
allChar.Split('
'
);
5.
randomCode
6.
int
temp
-1;
7.
rand
8.
9.
10.
if
(temp
!
-1)
11.
12.
Random(i
*
((int)DateTime.Now.Ticks));
13.
14.
t
rand.Next(9);
15.
==
t)
16.
17.
CreateRandomCode(codeCount);
18.
19.
t;
20.
+=
allCharArray[t];
21.
22.
randomCode;
23.}
数字+字母验证码的实现,代码如下:
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,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"
rand.Next(61);
汉字验证码的实现,代码如下:
1./**/
2./*
此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将
3.四个字节数组存储在object数组中。
4.参数:
strlength,代表需要产生的汉字个数
5.*/
public
static
object[]
CreateRegionCode(int
strlength)
//定义一个字符串数组储存汉字编码的组成元素
rBase
String[16]
0"
rnd
//定义一个object数组用来
bytes
object[strlength];
/**/
/*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中
每个汉字有四个区位码组成
区位码第1位和区位码第2位作为字节数组第一个元素
区位码第3位和区位码第4位作为字节数组第二个元素
*/
strlength;
//区位码第1位
23.
r1
rnd.Next(11,
14);
24.
str_r1
rBase[r1].Trim();
25.
26.
//区位码第2位
27.
Random(r1
unchecked((int)DateTime.Now.Ticks)
+
i);
//更换随机数发生器的种子避免产生重复值
28.
r2;
29.
(r1
13)
30.
31.
r2
rnd.Next(0,
7);
32.
33.
else
34.
35.
16);
36.
37.
str_r2
rBase[r2].Trim();
38.
39.
//区位码第3位
40.
Random(r2
41.
r3
rnd.Next(10,
42.
str_r3
rBase[r3].Trim();
43.
44.
//区位码第4位
45.
Random(r3
46.
r4;
47.
(r3
10)
48.
49.
r4
rnd.Next(1,
50.
51.
15)
52.
53.
15);
54.
55.
56.
57.