首页 > 编程 > .NET > 正文

详解ASP.NET验证码的生成方法

2024-07-10 12:47:13
字体:
来源:转载
供稿:网友

一般验证码的生成方法都是相同的,主要的步骤都有两步

第一步:随机出一系统验证码的数字或字母,顺便把随机生成的数字或字母写入Cookies 或者 Session。

第二步:用第一步随机出来的数字或字母来合成图片。

可以看出来验证码的复杂度主要是第二步来完成,你可以根据自己所要的复杂度来设定。

我们一起来看看:

 第一步:随机生成数字或字母的方法

/// <summary>  /// 生成验证码的随机数  /// </summary>  /// <returns>返回五位随机数</returns>  private string GenerateCheckCode()  {    int number;    char code;    string checkCode = String.Empty;    Random random = new Random();    for (int i = 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();    }    Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));//写入COOKIS    Session["CheckCode"] = checkCode; //写入Session,可以任意选一下    return checkCode;  }

第二步:生成图片

/// <summary>  /// 生成验证码图片  /// </summary>  /// <param name="checkCode"></param>  private void CreateCheckCodeImage(string checkCode)  {    if (checkCode == null || checkCode.Trim() == String.Empty)      return;    Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);    Graphics g = Graphics.FromImage(image);    try    {      //生成随机生成器      Random random = new Random();      //清空图片背景色      g.Clear(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 Pen(Color.Silver), x1, y1, x2, y2);      }      Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));      LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);      g.DrawString(checkCode, font, brush, 2, 2);      //画图片的前景噪音点      for (int i = 0; i < 100; i++)      {        int x = random.Next(image.Width);        int y = random.Next(image.Height);        image.SetPixel(x, y, Color.FromArgb(random.Next()));      }      //画图片的边框线      g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);      MemoryStream ms = new MemoryStream();      image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);      Response.ClearContent();      Response.ContentType = "image/Gif";      Response.BinaryWrite(ms.ToArray());    }    finally    {//释放对象资源      g.Dispose();      image.Dispose();    }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表