zoukankan      html  css  js  c++  java
  • asp.net 实现随机生成验证码

            一些网站中都有登录页面,登录时输入正确的验证码才可以,废话不多说,今天就用javascript

            和异步来实现自动生成图片验证码的功能。

            首先我们要插入一个一般处理程序(也就是ashx的文件,这里我给它起名为WaterMark.ashx)

            这个文件所包括的引用:

            using System;
            using System.Web;
            using System.Drawing;
            using System.Drawing.Drawing2D;
            using System.Web.SessionState; //在ashx文件中要使用Session就要添加此引用

            具体代码如下:

            public class WaterMark : IHttpHandler, IRequiresSessionState  // 要使用session必须实现该接口
          {
              public void ProcessRequest(HttpContext context)
              {
                  string checkCode = GenCode(4);  // 产生4位随机字符
                  context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
                  System.Drawing.Bitmap image = new System.Drawing.Bitmap(58, 22);//图片大小
                  Graphics g = Graphics.FromImage(image);
                  try
                  {
                      //生成随机生成器
                      Random random = new Random();
                      //清空图片背景色
                      g.Clear(Color.White);
                      // 画图片的背景噪音线
                      int i;
                      for (i = 0; i < 25; i++)
                      {
                          int x1 = random.Next(image.Width);
                          int x2 = random.Next(image.Width);
                          int y1 = random.Next(image.Height);
                          int y2 = random.Next(image.Height);
                          g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                      }
                      Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));
                      System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);
                      g.DrawString(checkCode, font, brush, 2, 2);
                      //画图片的前景噪音点
                      g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
                      System.IO.MemoryStream ms = new System.IO.MemoryStream();
                      image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                      context.Response.ClearContent();
                      context.Response.ContentType = "image/Gif";
                      context.Response.BinaryWrite(ms.ToArray());
                  }
                  finally
                  {
                      g.Dispose();
                      image.Dispose();
                  }
              }

              /// <summary>
              /// 产生随机字符串
              /// </summary>
              /// <param name="num">随机出几个字符</param>
              /// <returns>随机出的字符串</returns>
              private string GenCode(int num)
              {
                  string str = "0123456789ABCDEFGHiJKLMNOPQRSTUVWXYZ";//图片上随机文字
                  char[] chastr = str.ToCharArray();
                  string code = "";
                  Random rd = new Random();
                  int i;
                  for (i = 0; i < num; i++)
                  {
                      code += str.Substring(rd.Next(0, str.Length), 1);
                  }
                  return code;
              }
              public bool IsReusable
              {
                  get
                  {
                      return false;
                  }
              }
          }

          一般处理程序写完后,接着我们整理前台页面,为了能点击此图片能切换图片上的文字

             我们在hand里写上如下javascript切换事件

               <script language="javascript" type="text/javascript">
            function changeCode() {   
               var imgNode = document.getElementById("vimg");   

                  // 这里加个时间的参数是为了防止浏览器缓存的问题
               imgNode.src = "/WaterMark.ashx?t=" + (new Date()).valueOf();    
            }  
           </script>

        接着在想要显示这个随机验证图片的地方加入:

               验证码:<img src="/WaterMark.ashx" id="vimg" alt="" onclick="changeCode()"/>
               <asp:TextBox ID="txtCode" runat="server"></asp:TextBox>

               最后我们只需要在.cs页面上判断txtCode的值和Session["Code"]的值是否想等就可以了

               if(txtCode.Text.Trim()==Session["Code"])

         {

                   Response.Write("验证码输入正确!");

         }

                else

                {

                   Response.Write("验证码输入错误!请重新输入");

                }

              

     

           

  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/gaopin/p/2680330.html
Copyright © 2011-2022 走看看