验证码实现的技术与方法

说明:验证码的应用可以在一定程度上防止恶意注册,它的原理就是在一个单独的页面上首先左一张图片,

然后在这个图片上添加数字,字母或者汉字

应用

第一步:在后台中生成背景图片

int ImageWidth = 85;                            
int ImageHeight = 33;                            
Font font 
= new Font("Arial"19, FontStyle.Bold);//定义字体                            
Brush brush=new SolidBrush(Color.Black);//定义工具                            
Bitmap bitmap= new Bitmap(ImageWidth,ImageHeight);//定义画板                            
Graphics graphics = Graphics.FromImage(bitmap);//在定义的画板上绘图                            
graphics.Clear(ColorTranslator.FromHtml("#d9e8b7"));//填充背景颜色                            
RectangleF rect = new RectangleF(5,2,ImageWidth,ImageHeight);//定义个绘图形状                            
Pen pen1 = new Pen(Color.Blue);//定义钢笔 绘制干扰线                            
Pen pen2 = new Pen(Color.DarkGreen);//定义钢笔 绘制干扰线                            
Random rand = new Random();                            
for (int i = 0;i<2;i++)//绘制两条横向干扰线                            
{                            
    Point p1
=new Point(0,rand.Next(ImageWidth));                        
    Point p2
=new Point(ImageWidth,rand.Next(ImageWidth));                        
    graphics.DrawLine(pen1,p1,p2);                        
}                            
for (int i=0;i<2;i++)//绘制两条纵向干扰线                            
{                            
    Point p1 
= new Point(0,rand.Next(ImageHeight));                        
    Point p2 
= new Point(ImageHeight,rand.Next(ImageHeight));                        
    graphics.DrawLine(pen2,p1,p2);                        
}                            
graphics.DrawString(CheckRandomCode(),font,brush,rect);
//绘制验证码文字                            
bitmap.Save(Response.OutputStream,ImageFormat.Gif);//保存为gif格式的图片                            
graphics.Dispose();                            
bitmap.Dispose();                            

 

第二步:在后台中生成字符库,随机取出4个

public string CheckRandomCode()                        
{                        
Random rom 
= new Random();                        
char[] allcheckRandom ={'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','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'};                        
string Randomcode = "";                        
for (int i = 0; i < 4;i++)                        
{                        
Randomcode 
+=allcheckRandom[rom.Next(allcheckRandom.Length)];                        
Session[
"verty"= Randomcode;                        
}                        
Session[
"CheckCode"= Randomcode;                        
return Randomcode;                          
}                        
第三步:在前台中显示(显示的其实是一个图片)
其中checkCode.aspx就是一个页面                
<IMG id="Img1" src="../login/checkCode.aspx">                

 

第四步:"换下一张"的功能实现(确切地说为局部刷新)

在JS中:其中Img1为ID                        
                        
onclick
="Img1.src='../login/checkCode.aspx?'+Math.random()"                        
                        
在JQUERY中:                        
                        
 $(
"#Img1").attr("src","../login/checkCode.aspx?"+Math.random());                        

 

 

posted @ 2010-02-02 11:27  永恒de影シ  阅读(325)  评论(0编辑  收藏  举报