当前位置:编程学习 > C#/ASP.NET >>

ASP.NET怎样生成验证码

ASP.NET怎样生成验证码
答案:<%@ WebHandler Language="C#" Class="ValidateImageHandler" %>

using System;
using System.Web;
using System.Web.SessionState;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;

/// <summary>
/// ValidateImageHandler 生成网站验证码功能
/// </summary>
public class ValidateImageHandler : IHttpHandler, IRequiresSessionState
{ int intLength = 4; //长度 string strIdentify = "Identify"; //随机字串存储键值,以便存储到Session中
 public ValidateImageHandler() {}

    /// <summary>
    ///  生成验证图片核心代码
    /// </summary>
    /// <param name="hc"></param>
    public void ProcessRequest(HttpContext hc)
    {
        //设置输出流图片格式
        hc.Response.ContentType = "image/gif";
       
        Bitmap b = new Bitmap(200, 60);
        Graphics g = Graphics.FromImage(b);
        g.FillRectangle(new SolidBrush(Color.YellowGreen), 0, 0, 200, 60);
        Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
        Random r = new Random();

        //合法随机显示字符列表
        string strLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder s = new StringBuilder();
       
        //将随机生成的字符串绘制到图片上
        for (int i = 0; i < intLength; i++)
        {
            s.Append(strLetters.Substring(r.Next(0, strLetters.Length - 1), 1));
            g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.Blue), i * 38, r.Next(0, 15));}//生成干扰线条Pen pen = new Pen(new SolidBrush(Color.Blue), 2);for (int i = 0; i < 10; i++) { g.DrawLine(pen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59))); } b.Save(hc.Response.OutputStream, ImageFormat.Gif); hc.Session[strIdentify] = s.ToString(); //先保存在Session中,验证与用户输入是否hc.Response.End();}/// <summary>
    /// 表示此类实例是否可以被多个请求共用(重用可以提高性能)
    /// </summary> public bool IsReusable {get{return true;} }}

方法很多,我这里有大学时候写的例子,不知道你想要什么样的,需要的话晚上回去发给你。

 

新建一个页面后 把后置代码复制运行即可 (修改类名)

using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;
using System.Drawing;

public partial class TsDep_VerifyCode : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TsDep_VerifyCode v = new TsDep_VerifyCode();

        v.Length = this.length;
        v.FontSize = this.fontSize;
        v.Chaos = this.chaos;
        v.BackgroundColor = this.backgroundColor;
        v.ChaosColor = this.chaosColor;
        v.CodeSerial = this.codeSerial;
        v.Colors = this.colors;
        v.Fonts = this.fonts;
        v.Padding = this.padding;
        string code = v.CreateVerifyCode();                //取随机码
        v.CreateImageOnPage(code, this.Context);        // 输出图片

        Session["CheckCode"] = code.ToUpper();// 使用Session存验证码的值
    }

    #region 验证码长度(默认6个验证码的长度)
    int length = 5;
    public int Length
    {
        get { return length; }
        set { length = value; }
    }
    #endregion

    #region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改)
    int fontSize = 12;
    public int FontSize
    {
        get { return fontSize; }
        set { fontSize = value; }
    }
    #endregion

    #region 边框补(默认1像素)
    int padding = 2;
    public int Padding
    {
        get { return padding; }
        set { padding = value; }
    }
    #endregion

    #region 是否输出燥点(默认不输出)
    bool chaos = true;
    public bool Chaos
    {
        get { return chaos; }
        set { chaos = value; }
    }
    #endregion

    #region 输出燥点的颜色(默认灰色)
    Color chaosColor = Color.LightGray;
    public Color ChaosColor
    {
        get { return chaosColor; }
        set { chaosColor = value; }
    }
    #endregion

    #region 自定义背景色(默认白色)
    Color backgroundColor = Color.White;
    public Color BackgroundColor
    {
        get { return backgroundColor; }
        set { backgroundColor = value; }
    }
    #endregion

    #region 自定义随机颜色数组
    Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green,  Color.Brown, Color.DarkCyan, Color.Purple };
    public Color[] Colors
    {
        get { return colors; }
        set { colors = value; }
    }
    #endregion

    #region 自定义字体数组
    string[] fonts = { "Arial", "Georgia" };
    public string[] Fonts
    {
        get { return fonts; }
        set { fonts = value; }
    }
    #endregion

    #region 自定义随机码字符串序列(使用逗号分隔)

上一个:asp.net 重置 验证样式
下一个:asp 。net Repeater 小问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,