zoukankan      html  css  js  c++  java
  • .net完整的图文验证

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

    一、创建ValidaeCode类库工程

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

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

          3、ValidateCode.cs:

    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"]与用户所输入的值是否相等检查用户输入的验证码是否正确。 

  • 相关阅读:
    退役了
    Luogu1835 素数密度_NOI导刊2011提高(04
    Luogu1941 飞扬的小鸟
    Luogu4711 「化学」相对分子质量
    CF285E Positions in Permutations
    JZOJ 5944
    BZOJ3827: [Poi2014]Around the world && CF526E Transmitting Levels
    BZOJ3831: [Poi2014]Little Bird
    CF526F Pudding Monsters
    运算符重载
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/3379988.html
Copyright © 2011-2022 走看看