Asp.net 2.0 输入验证码

     使用效果:

      

     在App_Code下有2个类,一个是Rand.cs,另外一个是Verify.cs.

      Rand.cs用于生成随机数,代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class Rand
{
    /// <summary>
    /// 生成随机数字
    /// </summary>
    /// <param name="length">生成长度</param>
    /// <returns></returns>
    public static string Number(int Length)
    {
        return Number(Length, false);
    }
    /// <summary>
    /// 生成随机数字
    /// </summary>
    /// <param name="Length">生成长度</param>
    /// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
    /// <returns></returns>
    public static string Number(int Length, bool Sleep)
    {
        if (Sleep)
            System.Threading.Thread.Sleep(2);
        string result = "";
        System.Random random = new Random();
        for (int i = 0; i < Length; i++)
        {
            result += random.Next(10).ToString();
        }
        return result;
    }
    /// <summary>
    /// 生成随机字母与数字
    /// </summary>
    /// <param name="IntStr">生成长度</param>
    /// <returns></returns>
    public static string Str(int Length)
    {
        return Str(Length, false);
    }
    /// <summary>
    /// 生成随机字母与数字
    /// </summary>
    /// <param name="Length">生成长度</param>
    /// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
    /// <returns></returns>
    public static string Str(int Length, bool Sleep)
    {
        if (Sleep)
            System.Threading.Thread.Sleep(2);
        char[] Pattern = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
        string result = "";
        int n = Pattern.Length;
        System.Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
        for (int i = 0; i < Length; i++)
        {
            int rnd = random.Next(0, n);
            result += Pattern[rnd];
        }
        return result;
    }
    /// <summary>
    /// 生成随机纯字母随机数
    /// </summary>
    /// <param name="IntStr">生成长度</param>
    /// <returns></returns>
    public static string Str_char(int Length)
    {
        return Str_char(Length, false);
    }
    /// <summary>
    /// 生成随机纯字母随机数
    /// </summary>
    /// <param name="Length">生成长度</param>
    /// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
    /// <returns></returns>
    public static string Str_char(int Length, bool Sleep)
    {
        if (Sleep)
            System.Threading.Thread.Sleep(2);
        char[] Pattern = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
        string result = "";
        int n = Pattern.Length;
        System.Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
        for (int i = 0; i < Length; i++)
        {
            int rnd = random.Next(0, n);
            result += Pattern[rnd];
        }
        return result;
    }
}

      Verify.cs用于绘制图片,保存当前的验证码,代码如下:

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web;
/// <summary>
/// Verify 的摘要说明
/// </summary>
public class Verify
{
    /// <summary>
    /// 随机码认证
    /// </summary>
    /// <param name="code">生成认证长度</param>
    public static void DrawImage(int code)
    {
        HttpContext.Current.Session["CheckCode"] = Rand.Number(5);
        CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
    }
    /// <summary>
    /// /// 生成验证图片
    /// /// </summary>
    /// /// <param name="checkCode">验证字符</param>
    private static void CreateImages(string checkCode)
    {
        int iwidth = (int)(checkCode.Length * 15);
        System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 30);
        Graphics g = Graphics.FromImage(image);
        g.Clear(Color.LightCyan);
        //定义颜色
        Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
        //定义字体
        string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体", "Comic Sans MS" };
        Random rand = new Random();
        //随机输出噪点
        for (int i = 0; i < 150; i++)
        {
            int x = rand.Next(image.Width);
            int y = rand.Next(image.Height);
            g.DrawPie(new Pen(Color.LightGray, 0), x, y, 6, 6, 1, 1);
        }
        //输出不同字体和颜色的验证码字符
        for (int i = 0; i < checkCode.Length; i++)
        {
            int cindex = rand.Next(7);
            int findex = rand.Next(6);
            Font fs_font = new System.Drawing.Font(font[findex], 14, System.Drawing.FontStyle.Bold);
            Brush b = new System.Drawing.SolidBrush(c[cindex]);
            int ii = 4;
            if ((i + 1) % 2 == 0)
            {
                ii = 2;
            }
            g.DrawString(checkCode.Substring(i, 1), fs_font, b, 3 + (i * 12), ii);
        }
        //画一个边框
        g.DrawRectangle(new Pen(Color.Red, 0), 100, 0, image.Width - 1, image.Height - 1);
        //输出到浏览器
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        HttpContext.Current.Response.ClearContent();//Response.ClearContent();
        HttpContext.Current.Response.ContentType = "image/Jpeg";
        HttpContext.Current.Response.BinaryWrite(ms.ToArray());
        g.Dispose();
        image.Dispose(); }}

      用一张页面来输出认证码,Image.aspx,页面文件不需要写任何代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        Verify.DrawImage(5);
    }

      实际使用页面代码:

    <form id="form1" runat="server">  
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><script type="text/javascript" language="JavaScript">
                   var numkey = Math.random();
                   numkey = Math.round(numkey*10000);
                   document.write("<img src=\"Image.aspx?k="+ numkey +"\" width=\"70\" onClick=\"this.src+=Math.random()\" alt=\"图片看不清?点击重新得到验证码\" style=\"cursor:pointer;\" height=\"19\" hspace=\"4\"");
          </script>
        <br />
        <asp:Button ID="Button1" runat="server" Text="验证" OnClick="Button1_Click" />
    </form>

    后台CS代码:

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text != Session["CheckCode"].ToString())
        {
            Response.Write("<font color='red'>输入错误!</font>");
        }
        else
        {
            Response.Write("<font color='green'>输入正确!</font>");
        }
    }

       (完)
Permalink | Comments (0) | Hits: 549 | Time: 15:50:44
Javascript切换flash
Asp.net 错误捕获代码段
All Comments

 No Data Now...

Post Your Comment
^ ^

6654
Top
Display Pagerank