验证码的作用

验证码一般是防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴力破解方式进行不断的登陆、灌水。因为验证码是一个混合了数字或符号的图片,人眼看起来都费劲,机器识别起来就更困难。像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生。 一般注册用户ID的地方以及各大论坛都要要输入验证码

1、image.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Imaging;


public partial class image : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // 在此处放置用户代码以初始化页面
        //rndnum是一个自定义函数
        string vnum = rndnum(4); //这里的数字4代表显示的是4位的验证字符串!
        Session["vnum"] = vnum;
        validatecode(vnum);
    }
    private void validatecode(string vnum)
    {
        int gheight = (int)(vnum.Length * 11.5);
        //gheight为图片宽度,根据字符长度自动更改图片宽度
        System.Drawing.Bitmap img = new System.Drawing.Bitmap(gheight, 20);
        Graphics g = Graphics.FromImage(img);
        g.DrawString(vnum, new System.Drawing.Font("arial", 10), new System.Drawing.SolidBrush(Color.Red), 3, 3);
        //在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y) 
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        Response.ClearContent(); //需要输出图象信息 要修改http头 
        Response.ContentType = "image/png";
        Response.BinaryWrite(ms.ToArray());
        g.Dispose();
        img.Dispose();
        Response.End();
    }


    //生成随机数函数中从vchar数组中随机抽取
    //字母区分大小写
    public string rndnum(int vcodenum)
    {
        string vchar = "1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,w,x,y,z";


        string[] vcarray = vchar.Split(',');
        string vnum = "";//由于字符串很短,就不用stringbuilder了
        int temp = -1;//记录上次随机数值,尽量避免生产几个一样的随机数


        //采用一个简单的算法以保证生成随机数的不同
        Random rand = new Random();
        for (int i = 1; i < vcodenum + 1; i++)
        {
            if (temp != -1)
            {
                rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
            }
            //int t =  rand.next(35) ;
            int t = rand.Next(33);
            if (temp != -1 && temp == t)
            {
                return rndnum(vcodenum);
            }
            temp = t;
            vnum += vcarray[t];


        }
        return vnum;
    }
}


2、<asp:Image ID="Image2" runat="server" ImageUrl="~/image.aspx" />

3、登陆界面

 string vnum=(string)Session["vnum"];


        if (!vnum.Equals(TextBox3.Text.Trim()))
        {
            Response.Write("<script>alert(\"验证码失败\");</script>");
        }










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值