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[VALIDATECODEKEY] = 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[VALIDATECODEKEY] = 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;

        }

    }

}

再次申明非本人原创。可以到网上下载ASPNETAJAXWeb.ValidateCode.dll直接使用

你可能感兴趣的:(验证码)