asp.net随机验证码生成示例

发布时间:2019-08-21编辑:脚本学堂
分享一例asp.net随机生成验证码的代码,很简单,供初学asp.net编程的朋友参考,用来研究验证码的生成原理很不错。

例子,asp.net生成验证码。

代码:
 

复制代码 代码示例:
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
 <title>随机验证码_www.jb200.com</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 </head>
 <body>
 <img src="WaterMark.ashx" id="vimg" alt="" onclick="document.getElementById('vimg').src='this.src+='+?;" title="换一张" />
 </body>
 </html>
using System;  
 using System.Web;  
 using System.Drawing;  
 using System.Drawing.Drawing2D;  
 using System.Web.SessionState;    
  
 public class WaterMark : IHttpHandler, IrequiresSessionState  //  要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间  
 {  
  
     public void ProcessRequest(HttpContext context)  
     {  
  string checkCode = GenCode(5);  // 产生5位随机字符  
  context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证  
  System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);  
  Graphics g = Graphics.FromImage(image);  
  try 
  {  
      //生成随机生成器  
      Random random = new Random();  
  
      //清空图片背景色  
      g.Clear(Color.White);  
  
      // 画图片的背景噪音线  
      int i;  
      for (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 Pen(Color.Silver), x1, y1, x2, y2);  
      }  
  
      Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));  
      System.Drawing.Drawing2D.LinearGradientBrush brush =  new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);  
      g.DrawString(checkCode, font, brush, 2, 2);  
  
      //画图片的前景噪音点  
      g.DrawRectangle(new Pen(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);  
      context.Response.ClearContent();  
      context.Response.ContentType = "image/Gif";  
      context.Response.BinaryWrite(ms.ToArray());  
  }  
  finally 
  {  
      g.Dispose();  
      image.Dispose();  
  }  
}  
  
/// <summary>  
/// 产生随机字符串  
/// </summary>  
/// <param name="num">随机出几个字符</param>  
/// <returns>随机出的字符串</returns>
private string GenCode(int num)  
{  
  string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  char[] chastr = str.ToCharArray();  
  // string[] source ={ "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", "#", "$", "%", "&", "@" };  
  string code = "";  
  Random rd = new Random();  
  int i;  
  for (i = 0; i < num; i++)  
  {  
      //code += source[rd.Next(0, source.Length)];  
      code += str.Substring(rd.Next(0, str.Length), 1);  
  }  
  return code;  
}  
  
public bool IsReusable  
{  
  get 
  {  
      return false;  
  }  
}  
}