Asp.net(C#)实现验证码功能

Asp.net(C#)实现验证码功能

新建一个专门用来创建验证码图片的页面ValidateCode.aspx
它的后台cs文件代码如下:
PageLoad

private   void  Page_Load( object  sender, System.EventArgs e)
        
{
            
string checkCode = CreateRandomCode(4);
            Session[
"CheckCode"= checkCode;
            CreateImage(checkCode);
        }

其中CreateRandomCode是自定义的函数,参数代表验证码位数

private   string  CreateRandomCode( int  codeCount)
        
{
            
string allChar = "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" ;
            
string[] allCharArray = allChar.Split(',');
            
string randomCode = "";
            
int temp = -1;

            Random rand 
= new Random();
            
for(int i = 0; i < codeCount; i++)
            
{
                
if(temp != -1)
                
{
                    rand 
= new Random(i*temp*((int)DateTime.Now.Ticks));
                }

                
int t = rand.Next(35);
                
if(temp == t)
                
{
                    
return CreateRandomCode(codeCount);
                }

                temp 
= t;
                randomCode 
+= allCharArray[t];
            }

            
return randomCode;
        }

CreateImage也是一个自定义的函数,用于生成图

private   void  CreateImage( string  checkCode)
        
{
            
int iwidth = (int)(checkCode.Length * 11.5);
            System.Drawing.Bitmap image 
= new System.Drawing.Bitmap(iwidth, 20);
            Graphics g 
= Graphics.FromImage(image);
            Font f 
= new System.Drawing.Font("Arial"10, System.Drawing.FontStyle.Bold);
            Brush b 
= new System.Drawing.SolidBrush(Color.White);
            
//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
            g.Clear(Color.Blue);
            g.DrawString(checkCode, f, b, 
33);

            Pen blackPen 
= new Pen(Color.Black, 0);
            Random rand 
= new Random();
            
for (int i=0;i<5;i++)
            
{
                
int y = rand.Next(image.Height);
                g.DrawLine(blackPen,
0,y,image.Width,y);
            }

            
            System.IO.MemoryStream ms 
= new System.IO.MemoryStream();
            image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
            Response.ClearContent();
            Response.ContentType 
= "image/Jpeg";
            Response.BinaryWrite(ms.ToArray());
            g.Dispose();
            image.Dispose();
        }

//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
g.Clear(Color.Blue);
这两种方法都可以改变生成图片的背景颜色
下面那个for循环用来生成一些随机的水平线

在需要用到验证码的页面添加一个<asp:Image>控件即可,但是要把ImageUrl指向生成验证码的页面

< asp:Image Runat = " server "  ID = " ImageCheck "  ImageUrl="ValidateCode.aspx" ></ asp:Image >

posted on 2004-10-20 17:03 边城浪子 阅读(2313) 评论(34)  编辑 收藏

-----------------------------------

新建一个专门用来创建验证码图片的页面ValidateCode.aspx
它的后台cs文件代码如下:



PageLoad


private void Page_Load object sender, System.EventArgs e)
{
string checkCode = CreateRandomCode 4);
Session["CheckCode"] = checkCode;
CreateImage checkCode);
}
其中CreateRandomCode是自定义的函数,参数代表验证码位数


private string CreateRandomCode int codeCount)
{
string allChar = "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" ;
string[] allCharArray = allChar.Split ’,’);
string randomCode = "";
int temp = -1;


Random rand = new Random );
for int i = 0; i < codeCount; i++)
{
if temp != -1)
{
rand = new Random i*temp*  int)DateTime.Now.Ticks));
}
int t = rand.Next 35);
if temp == t)
{
return CreateRandomCode codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
}



CreateImage也是一个自定义的函数,用于生成图



private void CreateImage string checkCode)
{
int iwidth =  int) checkCode.Length * 11.5);
System.Drawing.Bitmap image = new System.Drawing.Bitmap iwidth, 20);
Graphics g = Graphics.FromImage image);
Font f = new System.Drawing.Font "Arial", 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush Color.White);
//g.FillRectangle new System.Drawing.SolidBrush Color.Blue),0,0,image.Width, image.Height);
g.Clear Color.Blue);
g.DrawString checkCode, f, b, 3, 3);


Pen blackPen = new Pen Color.Black, 0);
Random rand = new Random );
for  int i=0;i<5;i++)
{
int y = rand.Next image.Height);
g.DrawLine blackPen,0,y,image.Width,y);
}

System.IO.MemoryStream ms = new System.IO.MemoryStream );
image.Save ms,System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent );
Response.ContentType = "image/Jpeg";
Response.BinaryWrite ms.ToArray ));
g.Dispose );
image.Dispose );
}
//g.FillRectangle new System.Drawing.SolidBrush Color.Blue),0,0,image.Width, image.Height);
g.Clear Color.Blue);



这两种方法都可以改变生成图片的背景颜色
下面那个for循环用来生成一些随机的水平线


在需要用到验证码的页面添加一个<asp:Image>控件即可,但是要把ImageUrl指向生成验证码的页面



<asp:Image Runat="server" ID="ImageCheck" ImageUrl="ValidateCode.aspx"></asp:Image>





PageLoad


private void Page_Load object sender, System.EventArgs e)
{
string checkCode = CreateRandomCode 4);
Session["CheckCode"] = checkCode;
CreateImage checkCode);
}
其中CreateRandomCode是自定义的函数,参数代表验证码位数


private string CreateRandomCode int codeCount)
{
string allChar = "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" ;
string[] allCharArray = allChar.Split ’,’);
string randomCode = "";
int temp = -1;


Random rand = new Random );
for int i = 0; i < codeCount; i++)
{
if temp != -1)
{
rand = new Random i*temp*  int)DateTime.Now.Ticks));
}
int t = rand.Next 35);
if temp == t)
{
return CreateRandomCode codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
}



CreateImage也是一个自定义的函数,用于生成图



private void CreateImage string checkCode)
{
int iwidth =  int) checkCode.Length * 11.5);
System.Drawing.Bitmap image = new System.Drawing.Bitmap iwidth, 20);
Graphics g = Graphics.FromImage image);
Font f = new System.Drawing.Font "Arial", 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush Color.White);
//g.FillRectangle new System.Drawing.SolidBrush Color.Blue),0,0,image.Width, image.Height);
g.Clear Color.Blue);
g.DrawString checkCode, f, b, 3, 3);


Pen blackPen = new Pen Color.Black, 0);
Random rand = new Random );
for  int i=0;i<5;i++)
{
int y = rand.Next image.Height);
g.DrawLine blackPen,0,y,image.Width,y);
}

System.IO.MemoryStream ms = new System.IO.MemoryStream );
image.Save ms,System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent );
Response.ContentType = "image/Jpeg";
Response.BinaryWrite ms.ToArray ));
g.Dispose );
image.Dispose );
}
//g.FillRectangle new System.Drawing.SolidBrush Color.Blue),0,0,image.Width, image.Height);
g.Clear Color.Blue);



这两种方法都可以改变生成图片的背景颜色
下面那个for循环用来生成一些随机的水平线


在需要用到验证码的页面添加一个<asp:Image>控件即可,但是要把ImageUrl指向生成验证码的页面



<asp:Image Runat="server" ID="ImageCheck" ImageUrl="ValidateCode.aspx"></asp:Image>





PageLoad


private void Page_Load object sender, System.EventArgs e)
{
string checkCode = CreateRandomCode 4);
Session["CheckCode"] = checkCode;
CreateImage checkCode);
}
其中CreateRandomCode是自定义的函数,参数代表验证码位数


private string CreateRandomCode int codeCount)
{
string allChar = "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" ;
string[] allCharArray = allChar.Split ’,’);
string randomCode = "";
int temp = -1;


Random rand = new Random );
for int i = 0; i < codeCount; i++)
{
if temp != -1)
{
rand = new Random i*temp*  int)DateTime.Now.Ticks));
}
int t = rand.Next 35);
if temp == t)
{
return CreateRandomCode codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
}



CreateImage也是一个自定义的函数,用于生成图



private void CreateImage string checkCode)
{
int iwidth =  int) checkCode.Length * 11.5);
System.Drawing.Bitmap image = new System.Drawing.Bitmap iwidth, 20);
Graphics g = Graphics.FromImage image);
Font f = new System.Drawing.Font "Arial", 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush Color.White);
//g.FillRectangle new System.Drawing.SolidBrush Color.Blue),0,0,image.Width, image.Height);
g.Clear Color.Blue);
g.DrawString checkCode, f, b, 3, 3);


Pen blackPen = new Pen Color.Black, 0);
Random rand = new Random );
for  int i=0;i<5;i++)
{
int y = rand.Next image.Height);
g.DrawLine blackPen,0,y,image.Width,y);
}

System.IO.MemoryStream ms = new System.IO.MemoryStream );
image.Save ms,System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent );
Response.ContentType = "image/Jpeg";
Response.BinaryWrite ms.ToArray ));
g.Dispose );
image.Dispose );
}
//g.FillRectangle new System.Drawing.SolidBrush Color.Blue),0,0,image.Width, image.Height);
g.Clear Color.Blue);



这两种方法都可以改变生成图片的背景颜色
下面那个for循环用来生成一些随机的水平线


在需要用到验证码的页面添加一个<asp:Image>控件即可,但是要把ImageUrl指向生成验证码的页面



<asp:Image Runat="server" ID="ImageCheck" ImageUrl="ValidateCode.aspx"></asp:Image>


为了便于大家学习,修改vb.net code成为c#
gif.aspx文件修改的内容
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
// RndNum是一个自定义函数
string VNum = RndNum(5);
Session["VNum"] = VNum;
ValidateCode(VNum);


}
private void ValidateCode(string VNum)
{
//生成验证code
System.Drawing.Bitmap img;
System.Drawing.Graphics g;
System.IO.MemoryStream ms;
int gheight = Convert.ToInt32(VNum.Length*11.5);
//gheight为图片宽度,根据字符长度自动更改图片宽度
img = new Bitmap(gheight,20);
g = Graphics.FromImage(img);
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
g.DrawString(VNum,new Font("Arial",10),new SolidBrush(System.Drawing.Color.Blue),3,3);
ms = new MemoryStream();
img.Save(ms,ImageFormat.Png);


Response.ClearContent(); //需要输出图象信息 要修改HTTP头
Response.ContentType = "image/gif";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
img.Dispose();
Response.End();
}


// ''函数名称:RndNum
// ''函数参数:VcodeNum--设定返回随机字符串的位数
// ''函数功能:产生数字和字符混合的随机字符串
private string RndNum(int VcodeNum)
{
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" ;
string[] VcArray = Vchar.Split(",".ToCharArray()); //将字符串生成数组
string VNum = "";
int i;
for(i=1;i<VcodeNum;i++)
{
System.Random ro = new Random();
double decA = ro.NextDouble();
VNum = VNum + VcArray[Convert.ToInt32(35*decA)];
}
// For i=1 to VcodeNum
// Randomize
// VNum=VNum & VcArray(Int(35*Rnd)) ''数组一般从0开始读取,所以这里为35*Rnd
// Next
return VNum;


}


ValidateCode.aspx修改内容
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string VNum;
if(Session["VNum"]!= null)
{
VNum = Session["VNum"].ToString();
Session.Abandon();
ViewState["VNum"]=VNum;


}



}


private void Button1_Click(object sender, System.EventArgs e)
{
if(txtValidateCode.Text == ViewState["VNum"].ToString() )
{


lblShow.Text="提示:验证通过" ;
}
else
{
lblShow.Text="所填写的验证码与所给的不符";
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值