验证码
时间:2011-03-12 来源:奋斗张
验证码技术是会员登录最常用的验证技术,利用该技术可以防止用户利用机器人程序自动注册,登录,灌水,所谓验证码就是一串随机产生的数字和英文字母组合成德4位字符串,并且背景是带有一些干扰元素的图片,这样人通过肉眼可以辨识,但机器人程序就无能为力了。
1.自定义函数GenerateCheckCode()实现动态产生4个随机数或字母
private string generateChdeckCode(){
int number;//定义变量
char code;
string checkCode=String.Empty;
Random random=new Random()//定义随机变量实例
for(int i=0;i<4;i++){
number=random.Next();
if(number%2==0){
code=(char)('0'+(char)(number%10));
}else{
code=(char)('A'+(char)(number%26));
checkCode+=code.ToString();
}
}
Response.Cookies.Add(new HttpCookie("CheckCode",checkCode))
return chekcCode;
}
2.自定义函数CreateCheckCodeImage()实现动态生成会员登录验证码
private void CreateCheckCodeImage(string chekcCode){
if(checkCode==null||checkCode.trim()==String.Empty){
return;
}
System.Drawing.Bitmap image=new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length*12.5)),22)
Graphics g=Graphics.FromImage(image);
try{
Random random=new Random();
g.Clear(Color.White);
for(int i=0;i<2;i++){
int x1=random.Next(image.Width);
int x2=random.Next(image.Width);
int y1=random.Next(image.Height);
int y2=random.Next(image.Height);
g.DrawLine(new Pen(Color.Black),x1,y1,x2,y2);
}
Font font=new System.Drawing.Font("Arial",12,(System.Drawing.FontStyle.Bold));
System.Drawing.Drawing2D.LinearGradientBrush brush=new System.Draeing.Drawing2D.LinearGradientBrush(new Rectangle(0,0,image.Width,image.Height),Color.Blue,Color.DarkRed,1.2f,true);
g.DrawString(checkCode,font,brush,2,2);
for(int i=0;i<100;i++){
int x=random.Next(image.Width);
int y=random.Next(image.Height);
image.SetPixel(x,y,Color.FromArgb(ranom.Next()));
}
g.DrawRectangel(new Pen(Color.Silver),0,0,image.Width-1,image.Height-1);
System.IO.MemoryStream ms=new System.IO.MemoryStream();
image.Safe(ms,System.Drawing.Imageing.ImageFormat.Gif);
Respon.ClearContent();
respon.ContentType="image/Gif";
Respon.BinaryWrite(ms.ToArray());
}finally{
g.Dispose();
image.Disponse();
}
}
调用方法:
CreateCheckCodeImage(GenerateCheckCode);