使用ASP.NET写带验证码的网页

        验证码是一个图片,将字母、数字甚至汉字作为图片的内容,这样一张图片中的内容用人眼很容易识别,而程序将无法识别。在进行数据库操作之前(比如登录验证、投票、发帖、回复、注册等等)程序首先验证客户端提交的验证码是否与图片中的内容相同,如果相同则进行数据库操作,不同则提示验证码错误,不进行数据库操作。这样各种机器人程序就被拒之门外了!

         验证码的内容必须保存在服务器端,一般我们可以将随机生成的验证码的内容放入Session中,用户提交的时候将提交的内容与Session中的验证码进行比较判断。在生成验证码的页面后台代码可以写为:

         protected void Page_Load(object sender, EventArgs e)              {                   string checkCode = CreateRandomCode(6);                           Session["CheckCode"] = checkCode;                   CreateImage(checkCode);              }

       //生成codeCount位的校验码

        private string CreateRandomCode(int codeCount)        {         string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";         string[] allCharArray = allChar.Split(',');         string randomCode = "";         int temp = -1;

        Random rand = new Random();         for (int i = 0; i < codeCount; i++)         {             if (temp != -1)             {                 rand = new Random(i * temp * ((int)DateTime.Now.Ticks));             }             int t = rand.Next(35);             if (temp == t)             {                 return CreateRandomCode(codeCount);             }             temp = t;             randomCode += allCharArray[t];         }         return randomCode;     }

   //生成图像

    private void CreateImage(string checkCode)     {         int iwidth = (int)(checkCode.Length * 11.5);         System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);         Graphics g = Graphics.FromImage(image);         Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);         Brush b = new System.Drawing.SolidBrush(Color.White);         //g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);         g.Clear(Color.Blue);         g.DrawString(checkCode, f, b, 3, 3);

        //Pen blackPen = new Pen(Color.Black, 0);         //Random rand = new Random();         //for (int i = 0; i < 5; i++)         //{         //    int y = rand.Next(image.Height);         //    g.DrawLine(blackPen, 0, y, image.Width, y);         //}

        System.IO.MemoryStream ms = new System.IO.MemoryStream();         image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);         Response.ClearContent();         Response.ContentType = "image/Jpeg";         Response.BinaryWrite(ms.ToArray());         g.Dispose();         image.Dispose();     }

 

   客户端可以这样写:

   1、先拖一个Image控件在网页中,注意修改其ImageUrl属性为服务器的页面。

   2、拖动相应的控件进入网页,编辑按钮事件:

      protected void Button1_Click(object sender, EventArgs e)      {         if ((this.TextBox1.Text == "rocket5725") && (this.TextBox2.Text == "rocket5725") && (this.TextBox3.Text == Session["CheckCode"].ToString()))         {             Response.Redirect("http://www.sina.com.cn");         }         else             Response.Write("错误");       }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值