C#验证码.docx

上传人:b****4 文档编号:24278666 上传时间:2023-05-26 格式:DOCX 页数:18 大小:21.53KB
下载 相关 举报
C#验证码.docx_第1页
第1页 / 共18页
C#验证码.docx_第2页
第2页 / 共18页
C#验证码.docx_第3页
第3页 / 共18页
C#验证码.docx_第4页
第4页 / 共18页
C#验证码.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C#验证码.docx

《C#验证码.docx》由会员分享,可在线阅读,更多相关《C#验证码.docx(18页珍藏版)》请在冰豆网上搜索。

C#验证码.docx

C#验证码

今天在学习李天平的CodeMatic代码生成器时,看到后台登陆有一个验证码,便看看了,还是比较好用的,特地记录一下,以备他用.

     用的时候,自己建立一个aspx文件,把下面的代码复制进去,记得看清楚哦,这个是连Page_Load都有的,覆盖掉原来的就可以了,然后再需要验证码的地方拖一个image服务器控件,src就选择为自己建立的那个aspx文件.你如果觉得自己处理麻烦,可以下载我这个,添加到项目里就可以了(ValidateCode.aspx.rar)

 

Code

privatevoidPage_Load(objectsender,System.EventArgse)

   {

       stringcheckCode=GetRandomCode(4);

       Session["CheckCode"]=checkCode;

       SetPageNoCache();

       CreateImage(checkCode);

   }

   /**////

   ///设置页面不被缓存

   ///

   privatevoidSetPageNoCache()

   {

       Response.Buffer=true;

       Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1);

       Response.Expires=0;

       Response.CacheControl="no-cache";

       Response.AppendHeader("Pragma","No-Cache");

   }

   privatestringCreateRandomCode(intcodeCount)

   {

       stringallChar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,i,J,K,M,N,P,Q,R,S,T,U,W,X,Y,Z";

       string[]allCharArray=allChar.Split(',');

       stringrandomCode="";

       inttemp=-1;

       Randomrand=newRandom();

       for(inti=0;i

       {

           if(temp!

=-1)

           {

               rand=newRandom(i*temp*((int)DateTime.Now.Ticks));

           }

           intt=rand.Next(35);

           if(temp==t)

           {

               returnCreateRandomCode(codeCount);//性能问题

           }

           temp=t;

           randomCode+=allCharArray[t];

       }

       returnrandomCode;

   }

   privatestringGetRandomCode(intCodeCount)

   {

       stringallChar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,i,J,K,M,N,P,Q,R,S,T,U,W,X,Y,Z";

       string[]allCharArray=allChar.Split(',');

       stringRandomCode="";

       inttemp=-1;

       Randomrand=newRandom();

       for(inti=0;i

       {

           if(temp!

=-1)

           {

               rand=newRandom(temp*i*((int)DateTime.Now.Ticks));

           }

           intt=rand.Next(33);

           while(temp==t)

           {

               t=rand.Next(33);

           }

           temp=t;

           RandomCode+=allCharArray[t];

       }

       returnRandomCode;

   }

   privatevoidCreateImage(stringcheckCode)

   {

       intiwidth=(int)(checkCode.Length*14);

       System.Drawing.Bitmapimage=newSystem.Drawing.Bitmap(iwidth,20);

       Graphicsg=Graphics.FromImage(image);

       Fontf=newSystem.Drawing.Font("Arial",10);//,System.Drawing.FontStyle.Bold);

       Brushb=newSystem.Drawing.SolidBrush(Color.Black);

       Brushr=newSystem.Drawing.SolidBrush(Color.FromArgb(166,8,8));

       //g.FillRectangle(newSystem.Drawing.SolidBrush(Color.Blue),0,0,image.Width,image.Height);

       //           g.Clear(Color.AliceBlue);//背景色

       g.Clear(System.Drawing.ColorTranslator.FromHtml("#99C1CB"));//背景色

       char[]ch=checkCode.ToCharArray();

       for(inti=0;i

       {

           if(ch[i]>='0'&&ch[i]<='9')

           {

               //数字用红色显示

               g.DrawString(ch[i].ToString(),f,r,3+(i*12),3);

           }

           else

           {  //字母用黑色显示

               g.DrawString(ch[i].ToString(),f,b,3+(i*12),3);

           }

       }

       //for循环用来生成一些随机的水平线

       //           PenblackPen=newPen(Color.Black,0);

       //           Randomrand=newRandom();

       //           for(inti=0;i<5;i++)

       //           {

       //               inty=rand.Next(image.Height);

       //               g.DrawLine(blackPen,0,y,image.Width,y);

       //           }

       System.IO.MemoryStreamms=newSystem.IO.MemoryStream();

       image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);

       //historyback不重复

       Response.Cache.SetNoStore();//这一句        

       Response.ClearContent();

       Response.ContentType="image/Jpeg";

       Response.BinaryWrite(ms.ToArray());

       g.Dispose();

       image.Dispose();

   }

 

想起前些日子看到Terrylee也整理的一个图片验证码(点此查看),不知道怎么用,现在突然一下恍然大悟,原来用法和上面的一样,代码贴出来,我自己修改了一点点

 

Code

protectedvoidPage_Load(objectsender,EventArgse)

   {

       /**//**/

       /**////调用函数将验证码生成图片

       this.CreateCheckCodeImage(GenerateCheckCode());

   }

   /**//**/

   /**////

   ///产生五位的随机字符串

   ///

   ///

   privatestringGenerateCheckCode()

   {

       intnumber;

       charcode;

       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

               code=(char)('A'+(char)(number%26));

           checkCode+=code.ToString();

       }

       /**//**/

       /**////用于客户端校验码比较

       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);

           /**//**/

           /**////画图片的背景噪音线

           for(inti=0;i<25;i++)

           {

               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.FontStyle.Italic));

           System.Drawing.Drawing2D.LinearGradientBrushbrush=newSystem.Drawing.Drawing2D.LinearGradientBrush(newRectangle(0,0,image.Width,image.Height),Color.Blue,Color.DarkRed,1.2f,true);

           g.DrawString(checkCode,font,brush,2,2);

           /**//**/

           /**////画图片的前景噪音点

           for(inti=0;i<100;i++)

           {

               intx=random.Next(image.Width);

               inty=random.Next(image.Height);

               image.SetPixel(x,y,Color.FromArgb(random.Next()));

           }

           /**//**/

           /**////画图片的边框线

           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();

       }

   }

 

 

完整图形验证码程序

1、测试页面:

Default.aspx

<%@PageLanguage="C#"AutoEventWireup="true" CodeFile="Default.aspx.cs"Inherits="_Default"%>

 

DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http:

//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

//www.w3.org/1999/xhtml">

   ASP.NET验证码

   

   

       请输入验证码:

    

Imageid="Image1"runat="server"ImageUrl="ValidateCode.aspx"ImageAlign="Middle"/>

       

RequiredFieldValidatorID="RequiredFieldValidator1"runat="server"ErrorMessage="您没有输入验证码"ControlToValidate="txtVI">

RequiredFieldValidator>

       

ButtonID="Button1"runat="server"Text="提 交"OnClick="Button1_Click"/>

   

2、测试页面后台:

Default.aspx.cs

usingSystem;

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Web.UI.HtmlControls;

 

publicpartialclass_Default:

System.Web.UI.Page

{

   protectedvoidPage_Load(objectsender,EventArgse)

   {

 

   }

   protectedvoidButton1_Click(objectsender,EventArgse)

   {

       stringVNum;

       VNum=Session["VNum"].ToString();

       Session.Abandon();

       ViewState["VNum"]=VNum;

       if(txtVI.Value==ViewState["VNum"].ToString())

       {

           Response.Write("");

           return;

       }

       else

       {

           //VIWShow.Text="所填写的验证码不正确!

";

           Response.Write("");

           return;

       }

   }

}

3、生成验证码页面:

ValidateCode.aspx

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="ValidateCode.aspx.cs"Inherits="ValidateCode"%>

4、生成验证码页面后台:

usingSystem;

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Collections;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Web.UI.HtmlControls;

usingSystem.Drawing;

 

/*Copyrightall(c)2005ZhongFeng,*/

publicpartialclassValidateCode:

System.Web.UI.Page

{

   privatevoidPage_Load(objectsender,System.Event

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1