生成认证码

认证码是网站开发中经常使用的一种技术,它的目的是保证登录网站的是人而不是程序,防止某些人利用程序自动登录网站下载资料,过多占用网络带宽和服务器资源。

 

 

 

 

 

 

 

首先,新建一个生成认证码数字的类CreateImgValidateCode,附代码如下

 

 

 

 

 

 

 

public class CreateImgValidateCode

 

 

 

 

 

 

 

     {

 

 

 

 

 

 

 

         private Bitmap img = null;

 

 

 

 

 

 

 

         private Graphics g=null;

 

 

 

 

 

 

 

         private Bitmap imgClone = null;

 

 

 

 

 

 

 

         private bool isClone = false;

 

 

 

 

 

 

 

         private string _validateCode=String.Empty;

 

 

 

 

 

 

 

         private HttpContext _context=null;

 

 

 

 

 

 

 

         private int _imgWidth=40;

 

 

 

 

 

 

 

         private int _imgHeight=16;

 

 

 

 

 

 

 

         private string _defaultPicUrl="../img/imgcode1.jpg";  //认证码的背景图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         public CreateImgValidateCode()

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              //

 

 

 

 

 

 

 

              // TODO: 在此处添加构造函数逻辑

 

 

 

 

 

 

 

              //

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

         public bool IsReusable

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              get { return true; }

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

         public HttpContext WriteContext

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              set

 

 

 

 

 

 

 

              {

 

 

 

 

 

 

 

                   _context=value;

 

 

 

 

 

 

 

              }

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

         public int ImageWidth

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              set

 

 

 

 

 

 

 

              {

 

 

 

 

 

 

 

                   _imgWidth=value;

 

 

 

 

 

 

 

              }

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

         public int ImageHeight

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              set

 

 

 

 

 

 

 

              {

 

 

 

 

 

 

 

                   _imgHeight=value;

 

 

 

 

 

 

 

              }

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

         public string DefaultPicUrl

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              set

 

 

 

 

 

 

 

              {

 

 

 

 

 

 

 

                   _defaultPicUrl=value;

 

 

 

 

 

 

 

              }

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

         public  void ProcessRequest()

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              if(_context==null)

 

 

 

 

 

 

 

              {

 

 

 

 

 

 

 

                   throw new Exception("非法调用");

 

 

 

 

 

 

 

              }

 

 

 

 

 

 

 

              _validateCode=GetCurrentValidateCode();

 

 

 

 

 

 

 

              _context.Session["ValidateCode"]=_validateCode;

 

 

 

 

 

 

 

              WriteValidateCode(_validateCode);

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

         public string ValidateCode

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              get

 

 

 

 

 

 

 

              {

 

 

 

 

 

 

 

                   return _validateCode;

 

 

 

 

 

 

 

              }

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

         private string GetCurrentValidateCode()

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              Random rd = new Random();

 

 

 

 

 

 

 

              System.Text.StringBuilder sb = new System.Text.StringBuilder();

 

 

 

 

 

 

 

              sb.Append(rd.Next(9));

 

 

 

 

 

 

 

              sb.Append(rd.Next(9));

 

 

 

 

 

 

 

              sb.Append(rd.Next(9));

 

 

 

 

 

 

 

              sb.Append(rd.Next(9));

 

 

 

 

 

 

 

              return sb.ToString();

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

         private void WriteValidateCode(string num)

 

 

 

 

 

 

 

         {

 

 

 

 

 

 

 

              if(g==null)

 

 

 

 

 

 

 

              {

 

 

 

 

 

 

 

                   img = new Bitmap(_imgWidth,_imgHeight);

 

 

 

 

 

 

 

                   g  = Graphics.FromImage(img);

 

 

 

 

 

 

 

                   string imgPath = _context.Server.MapPath(_defaultPicUrl);

 

 

 

 

 

 

 

                   System.Drawing.Image bgImg = new Bitmap(imgPath,true);

 

 

 

 

 

 

 

                   g.DrawImage(bgImg,0,0,_imgWidth,_imgHeight);

 

 

 

 

 

 

 

                   imgClone = (Bitmap)img.Clone();

 

 

 

 

 

 

 

                   isClone = true;

 

 

 

 

 

 

 

              }

 

 

 

 

 

 

 

              else

 

 

 

 

 

 

 

              {

 

 

 

 

 

 

 

                   if(isClone)

 

 

 

 

 

 

 

                   {

 

 

 

 

 

 

 

                       img = (Bitmap)imgClone.Clone();

 

 

 

 

 

 

 

                       g = Graphics.FromImage(img);

 

 

 

 

 

 

 

                   }

 

 

 

 

 

 

 

              }

 

 

 

 

 

 

 

              g.DrawString(num,new Font("Arial",9),new SolidBrush(Color.Blue),4,2,System.Drawing.StringFormat.GenericTypographic);

 

 

 

 

 

 

 

              img.Save(_context.Response.OutputStream,ImageFormat.Gif);

 

 

 

 

 

 

 

              g.Dispose();

 

 

 

 

 

 

 

         }

 

 

 

 

 

 

 

     }

 

 

 

 

 

 

 

再新建一个页面CreateImageValidateCode,在页面的Page_Load中加入如下代码:

 

 

 

 

 

 

 

     if(!Page.IsPostBack)

 

 

 

 

 

 

 

     {

 

 

 

 

 

 

 

         CreateImgValidateCode c=new CreateImgValidateCode();

 

 

 

 

 

 

 

         c.WriteContext=this.Context;

 

 

 

 

 

 

 

         c.ProcessRequest();

 

 

 

 

 

 

 

     }

 

 

 

 

 

 

 

现在就可以在需要认证码的页面加入一个image控件和一个文本框控件(用户输入认证码),并将这个控件的图像源设为上面新建的CreateImageValidateCode页面,认证码功能已经实现了,最后只要在这个页面的代码里加入判断输入值是否等于系统生成的值,如果等就可以进入下面的判断,不等给出错误信息并返回,(认证码值生成后存储在服务器的Session中)如下:

 

 

 

 

 

 

 

     if(this.sn2.Text!=Session["ValidateCode"].ToString())

 

 

 

 

 

 

 

     {

 

 

 

 

 

 

 

         Response.Write("<script>alert('错误的验证码,请重新输入!');</script>");

 

 

 

 

 

 

 

         this.sn2.Text="";

 

 

 

 

 

 

 

         return;

 

 

 

 

 

 

 

     }

 

 

 

 

 

 

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=535527

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值