asp.net生成验证码(纯数字)

  CheckCode.cs

  

复制代码 代码如下:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  using System.Drawing;

  /// <summary>

  /// CheckCode 的摘要说明

  /// </summary>

  public class CheckCode

  {

  public CheckCode()

  {

  //

  // TODO: 在此处添加构造函数逻辑

  //

  }

  public static void DrawImage()

  {

  CheckCode img = new CheckCode();

  HttpContext.Current.Session["CheckCode"] = img.RndNum(4);

  img.checkCodes(HttpContext.Current.Session["CheckCode"].ToString());

  }

  /// <summary>

  /// 生成验证图片

  /// </summary>

  /// <param name="checkCode">验证字符</param>

  private void checkCodes(string checkCode)

  {

  int iwidth = (int)(checkCode.Length * 13);

  System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);

  Graphics g = Graphics.FromImage(image);

  g.Clear(Color.White);

  //定义颜色

  Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };

  //定义字体

  string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };

  Random rand = new Random();

  //随机输出噪点

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

  {

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

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

  g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);

  }

  //输出不同字体和颜色的验证码字符

  for (int i = 0; i < checkCode.Length; i++)

  {

  int cindex = rand.Next(7);

  int findex = rand.Next(5);

  Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);

  Brush b = new System.Drawing.SolidBrush(c[cindex]);

  int ii = 4;

  if ((i + 1) % 2 == 0)

  {

  ii = 2;

  }

  g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);

  }

  //画一个边框

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

  //输出到浏览器

  System.IO.MemoryStream ms = new System.IO.MemoryStream();

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

  HttpContext.Current.Response.ClearContent();

  //Response.ClearContent();

  HttpContext.Current.Response.ContentType = "image/Jpeg";

  HttpContext.Current.Response.BinaryWrite(ms.ToArray());

  g.Dispose();

  image.Dispose();

  }

  /// <summary>

  /// 生成随机的字母

  /// </summary>

  /// <param name="VcodeNum">生成字母的个数</param>

  /// <returns>string</returns>

  private string RndNum(int VcodeNum)

  {

  string Vchar = "0,1,2,3,4,5,6,7,8,9";

  string[] VcArray = Vchar.Split(',');

  string VNum = ""; //由于字符串很短,就不用StringBuilder了

  int temp = -1; //记录上次随机数值,尽量避免生产几个一样的随机数

  //采用一个简单的算法以保证生成随机数的不同

  Random rand = new Random();

  for (int i = 1; i < VcodeNum + 1; i++)

  {

  if (temp != -1)

  {

  rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));

  }

  int t = rand.Next(VcArray.Length);

  if (temp != -1 && temp == t)

  {

  return RndNum(VcodeNum);

  }

  temp = t;

  VNum += VcArray[t];

  }

  return VNum;

  }

  }

  再建立一个引用类的页面checkCode.aspx前台不用写东西,后台引用我们创建的类的DrawImage()方法即可。

  

复制代码 代码如下:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Collections;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  public partial class checkCode : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  CheckCode.DrawImage();

  }

  }

  下面我们在需要验证码的页面引用checkCode.aspx页面即可。

  前台

  

复制代码 代码如下:

  <asp:TextBox ID="Validator" runat="server" Width="150px" ></asp:TextBox>

  <img id="Img1" alt="看不清,请点击我!" onclick="this.src=this.src+'?'" src="checkCode.aspx"

  style="width: 73px; height: 22px" align="left" />

  <asp:ImageButton ID="imgBtnLogin" runat="server" ImageUrl="~/Images/Login.GIF"

  OnClick="imgBtnLogin_Click" />

  后台判断

  

复制代码 代码如下:

  protected void imgBtnLogin_Click(object sender, ImageClickEventArgs e)

  {

  if(this.Validator.Text==Session["CheckCode"].ToString())

  {

  //。。。。

  }

  else

  {

  Response.Write("<script>alert('验证码输入错误,请重新输入!');Location='MumberValidate.aspx'</script>");

  return;

  }

  }

  以上代码请根据实际情况作适当修改。