King雷 发表于 2015-3-12 09:13:21

C#实现随机验证码


using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Text;

using System.Drawing.Drawing2D;

using System.Drawing;

using System.IO;

using System.Drawing.Imaging;



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

{

    private string code;

    private const int ImageHeigth = 22;             //验证码图片的高度

    private const double ImageLengthBase = 12.5;    //验证码图片中每个字符的宽度

    private const int ImageLineNumber = 25;         //噪音线的数量

    private const int ImagePointNumber = 100;       //噪点的数量

    private int length;

    public static string VALIDATECODEKEY;       //此处用来保存验证码到Session的Key的名称



    //静态构造函数初始化验证码在Session中的Key名称

    static ValidateCode()

    {

      VALIDATECODEKEY = "VALIDATECODEKEY";

    }



    //设置验证码的长度和内容

    public ValidateCode()

    {

      this.length = 4;

      this.code = string.Empty;

    }



    /// <summary>

    /// 产生随机的验证码并加入Session

    /// </summary>

    /// <param name="length">验证码长度</param>

    /// <returns></returns>

    public string CreateCode(int length)

    {

      if (length <= 0)

      {

            return string.Empty;

      }

      Random random = new Random();

      StringBuilder builder = new StringBuilder();

      //产生随机的验证码并拼接起来

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

      {

            builder.Append(random.Next(0, 10));

      }

      this.code = builder.ToString();

      this.Session = this.code;

      return this.code;

    }



    /// <summary>

    /// 根据长度产生验证码

    /// 并将验证码画成图片

    /// </summary>

    /// <param name="length">验证码长度</param>

    public void CreateValidateImage(int length)

    {

      this.code = this.CreateCode(length);

      this.CreateValidateImage(this.code);

    }

    /// <summary>

    /// 根据产生的验证码生成图片

    /// </summary>

    /// <param name="code">验证码</param>

    public void CreateValidateImage(string code)

    {

      if (!string.IsNullOrEmpty(code))

      {

            this.Session = code;

            //初始化位图Bitmap对象,指定图片对象的大小(宽,高)

            Bitmap image = new Bitmap((int)Math.Ceiling((double)(code.Length * ImageLengthBase)), ImageHeigth);

            //初始化一块画布

            Graphics graphics = Graphics.FromImage(image);

            Random random = new Random();

            try

            {

                int num5;

                graphics.Clear(Color.White);

                //绘制噪音线

                for (num5 = 0; num5 < ImageLineNumber; num5++)

                {

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

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

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

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

                  graphics.DrawLine(new Pen(Color.Silver), num, num3, num2, num4);

                }

                //验证码字体样式

                Font font = new Font("Tahoma", 12, FontStyle.Italic | FontStyle.Bold);

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

                //绘制验证码到画布

                graphics.DrawString(code, font, brush, (float)2, (float)2);

                //绘制噪点

                for (num5 = 0; num5 < ImagePointNumber; num5++)

                {

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

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

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

                }

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

                MemoryStream stream = new MemoryStream();

                //保存图片

                image.Save(stream, ImageFormat.Gif);

                base.Response.ClearContent();

                base.Response.ContentType = "image/Gif";

                base.Response.BinaryWrite(stream.ToArray());

            }

            finally

            {

                graphics.Dispose();

                image.Dispose();

            }

      }

    }

    protected override void OnLoad(EventArgs e)

    {

      this.CreateValidateImage(this.length);

    }



    // Properties

    public string Code

    {

      get

      {

            return this.Code;

      }

    }

    public int Length

    {

      get

      {

            return this.length;

      }

      set

      {

            this.length = value;

      }

    }

}

ibcadmin 发表于 2015-3-12 09:18:30

.....顶一下

songyusb 发表于 2015-3-12 09:29:15

我是路过的酱油哥

wibc 发表于 2015-3-12 10:28:17

学习了
页: [1]
查看完整版本: C#实现随机验证码