asp.net 验证码

来源:互联网 发布:zbrush 4r8 mac 破解 编辑:程序博客网 时间:2024/06/05 04:21

验证码用于登陆时防暴力破解的一种方法,用的还比较广,至于我为什么写这个,主要是因为我刚学了C#的GDI+,根据一些网上的参考,程序运行OK.

代码如下:

首先建一个一般处理程序;

<%@ WebHandler Language="C#" Class="generateimage" %>


using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;


public class generateimage : IHttpHandler,System.Web.SessionState.IRequiresSessionState {//这里要说明一下  必须加IRequiresSessionState接口  此接口没方法,在这里作一个标志

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/gif";
        //新建一个位图,宽200、高60
        using (Bitmap b = new Bitmap(120, 30))
        {
            using (Graphics g = Graphics.FromImage(b))
            {


                //有一个随机数,更换三种背景颜色
                //Brushes.Aqua,Brushes.Beige,Brushes.Coral
                Random ran = new Random();
                int i = ran.Next(1, 3);
                if (i == 1)
                {
                    g.FillRectangle(Brushes.Coral, 0, 0, 120, 30);
                }
                else if (i == 2)
                {
                    g.FillRectangle(Brushes.Aqua, 0, 0, 120, 30);
                }
                else if (i == 3)
                {
                    g.FillRectangle(Brushes.Beige, 0, 0, 120, 30);
                }


                //合法字符串
                string strLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
                System.Text.StringBuilder str = new System.Text.StringBuilder();
                //定义字体
                Font font = new Font(FontFamily.GenericSerif, 16, FontStyle.Bold);//当你改图片大小时 改一下字号
                for (i = 0; i < 5; i++)
                {
                    str.Append(strLetters.Substring(ran.Next(0, strLetters.Length - 1), 1));
                    //画字符串
                    g.DrawString(str[i].ToString(), font, Brushes.Green, i * 18 + 12, ran.Next(1, 10));//当你改图片大小时  要改一下 这里  关于文字大小和间距
                }


                //生成干扰线条    此干扰线条  可要可不要   
                //Pen pen = new Pen(new SolidBrush(Color.Blue), 2);
                //for (i = 0; i < 10; i++)
                //{
                //    g.DrawLine(pen, new Point(ran.Next(0, 119), ran.Next(0, 29)), new Point(ran.Next(0, 119), ran.Next(0, 29)));
                //}
                //位图保存到输出流中
                b.Save(context.Response.OutputStream, ImageFormat.Gif);
                //session赋初值
                context.Session.Add("identity", "abc");
                //保存session
                context.Session["identity"] = str.ToString().ToLower();
            }
        }




    }


    public bool IsReusable
    {
        get
        {
            return false;
        }
    }


}

调用代码:

    输入验证码:<img src="generateimage.ashx" alt="看不清楚,换一张" id="imgcheck" onclick="this.src='generateimage.ashx?'+Math.random()" style="height:25px;width:120px;border:2px solid #fff;" />

后台验证

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Session["identity"].ToString().ToLower() == TextBox1.Text.ToLower())
        {
            Response.Write("<script type="+"'text/javascript'"+">alert('验证码正确')</script>");
        }
    }

代码完成。