.net完整的图文验证

摘自:http://blog.csdn.net/durongjian/article/details/4336380

一、创建ValidaeCode类库工程

      1、创建ValidaeCode类库工程,在[解决胜方案资源管理器]面板中,右键单击[ValidateCode]节点,并选择[属性]命令。

      2、单击[属性]命令,选中[应用程序],半分别把程序集名称默认命名空间两个属性值设为“ASPNETAJAXWeb.ValidateCode”和“ASPNETAJAXWeb.ValidateCode.Page”。

      3、ValidateCode.cs:

.net完整的图文验证
using System;

using System.Text;

using System.Drawing;

using System.Drawing.Imaging;

using System.Drawing.Drawing2D;

using System.IO;

/// <summary>

///ValidateCode 的摘要说明

/// </summary>

namespace ASPNETAJAXWeb.ValidateCode.Page

{

    public class ValidateCode : System.Web.UI.Page

    {

        private const double IMAGELENGTHBASE = 12.5;

        private const int IMAGEHEIGTH = 22;

        private const int IMAGELINENUMBER = 25;

        private const int IMAGEPOINTNUMBER = 100;

        public static string VALIDATECODEKEY = "VALIDATECODEKEY";

        private int length = 4;//验证码的数字个数

        private string code = string.Empty;

        public ValidateCode()

        {

            //

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

            //

        }

        public int Length

        {

            get { return length; }

            set { length = value; }

        }

        public string Code

        {

            get { return Code; }

        }



        /// <summary>

        /// 创建随机验证码

        /// </summary>

        /// <param name="length"></param>

        /// <returns></returns>

        public string CreateCode(int length)

        {

            if (length <= 0)

                return string.Empty;

            Random random = new Random();

            StringBuilder sbCode = new StringBuilder();

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

            {

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

            }

            code = sbCode.ToString();

            Session[VALIDATECODEKEY] = code;

            return code;

        }





        /// <summary>

        /// 创建验证码的图片和验证码

        /// </summary>

        /// <param name="code"></param>

        public void CreateValidateImage(string code)

        {

            if (string.IsNullOrEmpty(code) == true)

                return;

            Session[VALIDATECODEKEY] = code;

            Bitmap image = new Bitmap((int)Math.Ceiling((code.Length * IMAGELENGTHBASE)), IMAGEHEIGTH);

            Graphics g = Graphics.FromImage(image);





            ///随机数生成器

            Random random = new Random();

            try

            {

                g.Clear(Color.White);

                ///绘制图片的干扰线

                int x1, x2, y1, y2;

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

                {

                    x1 = random.Next(image.Width);

                    x2 = random.Next(image.Height);

                    y1 = random.Next(image.Width);

                    y2 = random.Next(image.Height);

                }



                ///绘制验证码

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

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

                g.DrawString(code, font, brush, 2.0f, 2.0f);





                ///画图片的前景噪音点

                int x, y;

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

                {

                    x = random.Next(image.Width);

                    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, ImageFormat.Gif);





                ///

                Response.ClearContent();

                Response.ContentType = "image/Gif";

                Response.BinaryWrite(ms.ToArray());

            }

            finally

            {

                g.Dispose();

                image.Dispose();

            }

        }





        protected override void OnLoad(EventArgs e)

        {

            CreateValidateImage(length);

        }

        public void CreateValidateImage(int length)

        {

            code = CreateCode(length);

            CreateValidateImage(code);

        }

    }

}     
View Code

    4、在另外一个ASP.NET应用程序中添加Web窗体页ValidateCode.aspx,并删除该页面的代码隐藏文件(ValidateCode.aspx.cs)

      5、删除 ValidateCode.aspx页面的HTML代码,仅仅保留一行使用“@Page”指令的如下代码:

<%@ Page Language="C#" AutoEventWireup="false" Inherits="ASPNETAJAXWeb.ValidateCode.Page.ValidateCode" %>

      6、使用图文验证页面:把 ValidateCode.aspx页面复制到要使用该页面的ASP.NET应用程序中,使用引用的方法把程序集添加到Bin目录下,在使用验证码的页面上添加一下Image控件,并将该控件的ImageUrl属性的值设置为ValidateCode.aspx。 

<asp:Image ID="Image1" runat="server" ImageUrl="~/ValidateCode.aspx" />

     7、可通过判断Session["VALIDATECODEKEY"]与用户所输入的值是否相等检查用户输入的验证码是否正确。 

你可能感兴趣的:(.net)