好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#验证码的创建与使用示例

本文实例讲述了C#验证码的创建与使用方法。分享给大家供大家参考,具体如下:

1、C#创建验证码

① 创建获取验证码页面(ValidateCode.aspx)

?

< html xmlns = "http://HdhCmsTestw3.org/1999/xhtml" >

< head runat = "server" >

   < title >获取验证码</ title >

</ head >

< body >

   < form id = "form1" runat = "server" >

     < div >获取验证码</ div >

   </ form >

</ body >

</ html >

② 编写获取验证码代码(ValidateCode.aspx.cs)

?

/// <summary>

/// 验证码类型(0-字母数字混合,1-数字,2-字母)

/// </summary>

private string validateCodeType = "0" ;

/// <summary>

/// 验证码字符个数

/// </summary>

private int validateCodeCount = 4;

/// <summary>

/// 验证码的字符集,去掉了一些容易混淆的字符

/// </summary>

char [] character = { '2' , '3' , '4' , '5' , '6' , '8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'J' , 'K' , 'L' , 'M' , 'N' , 'P' , 'R' , 'S' , 'T' , 'W' , 'X' , 'Y' };

protected void Page_Load( object sender, EventArgs e)

{

   //取消缓存

   Response.BufferOutput = true ;

   Response.Cache.SetExpires(DateTime.Now.AddMilliseconds(-1));

   Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

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

   //获取设置参数

   if (! string .IsNullOrEmpty(Request.QueryString[ "validateCodeType" ]))

   {

     validateCodeType = Request.QueryString[ "validateCodeType" ];

   }

   if (! string .IsNullOrEmpty(Request.QueryString[ "validateCodeCount" ]))

   {

     int .TryParse(Request.QueryString[ "validateCodeCount" ], out validateCodeCount);

   }

   //生成验证码

   this .CreateCheckCodeImage(GenerateCheckCode());

}

private string GenerateCheckCode()

{

   char code ;

   string checkCode = String.Empty;

   System.Random random = new Random();

   for ( int i = 0; i < validateCodeCount; i++)

   {

     code = character[random.Next(character.Length)];

     // 要求全为数字或字母

     if (validateCodeType == "1" )

     {

       if (( int )code < 48 || ( int )code > 57)

       {

         i--;

         continue ;

       }

     }

     else if (validateCodeType == "2" )

     {

       if (( int )code < 65 || ( int )code > 90)

       {

         i--;

         continue ;

       }

     }

     checkCode += code;

   }

   Response.Cookies.Add( new System.Web.HttpCookie( "CheckCode" , checkCode));

   this .Session[ "CheckCode" ] = checkCode;

   return checkCode;

}

private void CreateCheckCodeImage( string checkCode)

{

   if (checkCode == null || checkCode.Trim() == String.Empty)

     return ;

   System.Drawing.Bitmap image = new System.Drawing.Bitmap(( int )Math.Ceiling((checkCode.Length*15.0+40)), 23);

   System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);

   try

   {

     //生成随机生成器

     Random random = new Random();

     //清空图片背景色

     g.Clear(System.Drawing.Color.White);

     //画图片的背景噪音线

     for ( int i = 0; i < 25; 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 System.Drawing.Pen(System.Drawing.Color.Silver), x1, y1, x2, y2);

     }

     System.Drawing.Font font = new System.Drawing.Font( "Arial" , 14, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));

     System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush( new System.Drawing.Rectangle(0, 0, image.Width, image.Height), System.Drawing.Color.Blue, System.Drawing.Color.DarkRed, 1.2f, true );

     int cySpace = 16;

     for ( int i = 0; i < validateCodeCount; i++)

     {

       g.DrawString(checkCode.Substring(i, 1), font, brush, (i + 1) * cySpace, 1);

     }

     //画图片的前景噪音点

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

     {

       int x = random.Next(image.Width);

       int y = random.Next(image.Height);

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

     }

     //画图片的边框线

     g.DrawRectangle( new System.Drawing.Pen(System.Drawing.Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

     System.IO.MemoryStream ms = new System.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();

   }

}

2、验证码的使用

① 验证码的前段显示代码

复制代码 代码如下:

<img src="/ValidateCode.aspx?ValidateCodeType=1&0.011150883024061309" onclick="this.src='/ValidateCode.aspx?ValidateCodeType=1&'+Math.random();" id="imgValidateCode" csharp" id="highlighter_239683">

?

<html xmlns= "http://HdhCmsTestw3.org/1999/xhtml" >

<head runat= "server" >

   <title>验证码测试</title>

</head>

<body>

   <form id= "form1" runat= "server" >

   <div>

     <input runat= "server" id= "txtValidate" />

     <img src= "/ValidateCode.aspx?ValidateCodeType=1&0.011150883024061309" onclick= "this.src='/ValidateCode.aspx?ValidateCodeType=1&'+Math.random();" id= "imgValidateCode" alt= "点击刷新验证码" title= "点击刷新验证码" style= "cursor: pointer;" >

     <asp:Button runat= "server" id= "btnVal" Text= "提交" onclick= "btnVal_Click" />

   </div>

   </form>

</body>

</html>

③ 编写验证码测试的提交代码(ValidateTest.aspx.cs)

?

protected void btnVal_Click( object sender, EventArgs e)

{

   bool result = false ;  //验证结果

   string userCode = this .txtValidate.Value; //获取用户输入的验证码

   if (String.IsNullOrEmpty(userCode))

   {

     //请输入验证码

     return ;

   }

   string validCode = this .Session[ "CheckCode" ] as String; //获取系统生成的验证码

   if (! string .IsNullOrEmpty(validCode))

   {

     if (userCode.ToLower() == validCode.ToLower())

     {

       //验证成功

       result = true ;

     }

     else

     {

       //验证失败

       result = false ;

     }

   }

}

希望本文所述对大家C#程序设计有所帮助。

dy("nrwz");

查看更多关于C#验证码的创建与使用示例的详细内容...

  阅读:39次