asp.net 验证码


验证码用于登陆时防暴力破解的一种方法,用的还比较广,至于我为什么写这个,主要是因为我刚学了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>");
        }
    }

代码完成。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值