zoukankan      html  css  js  c++  java
  • 设置登录时的图形验证码

    首先建一个一般处理程序,命名为RandomCode.ashx

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Collections;
      6 using System.Configuration;
      7 using System.Data;
      8 using System.Web;
      9 using System.Web.UI;
     10 using System.Web.UI.WebControls;
     11 using System.Web.UI.WebControls.WebParts;
     12 using System.Web.UI.HtmlControls;
     13 using System.Drawing;
     14 
     15 namespace IntegritySystem.Web.Tools
     16 {
     17     /// <summary>
     18     /// RandomCode 的摘要说明
     19     /// </summary>
     20     public class RandomCode : IHttpHandler, System.Web.SessionState.IRequiresSessionState
     21     {
     22         public void ProcessRequest(HttpContext context)
     23         {
     24             string checkCode = GetRandomCode(5);
     25             context.Session["CheckCode"] = checkCode;
     26             SetPageNoCache();
     27             CreateImage(checkCode);
     28         }
     29         //获取验证码各个字母
     30         private string GetRandomCode(int CodeCount)
     31         {
     32             string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,i,J,K,M,N,P,Q,R,S,T,U,W,X,Y,Z";
     33             string[] allCharArray = allChar.Split(',');
     34             string RandomCode = "";
     35             int temp = -1;
     36             Random rand = new Random();
     37             for (int i = 0; i < CodeCount; i++)
     38             {
     39                 if (temp != -1)
     40                 {
     41                     rand = new Random(temp * i * ((int)DateTime.Now.Ticks));
     42                 }
     43                 int t = rand.Next(33);
     44                 while (temp == t)
     45                 {
     46                     t = rand.Next(33);
     47                 }
     48                 temp = t;
     49                 RandomCode += allCharArray[t];
     50             }
     51             return RandomCode;
     52         }
     53 
     54         //页面设置没有缓存
     55         private void SetPageNoCache()
     56         {
     57            HttpContext.Current.Response.Buffer = true;
     58            HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
     59            HttpContext.Current.Response.Expires = 0;
     60            HttpContext.Current.Response.CacheControl = "no-cache";
     61            HttpContext.Current.Response.AppendHeader("Pragma", "No-Cache");
     62         }
     63 
     64         //设置背景图片
     65         private void CreateImage(string checkCode)
     66         {
     67             int iwidth = (int)(checkCode.Length * 14);
     68             System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 30);
     69             Graphics g = Graphics.FromImage(image);
     70             Font f = new System.Drawing.Font("Arial", 15);
     71             Brush b = new System.Drawing.SolidBrush(Color.Black);
     72             Brush r = new System.Drawing.SolidBrush(Color.FromArgb(166, 8, 8));
     73             g.Clear(System.Drawing.ColorTranslator.FromHtml("#fff"));//背景色
     74             char[] ch = checkCode.ToCharArray();
     75             for (int i = 0; i < ch.Length; i++)
     76             {
     77                 if (ch[i] >= '0' && ch[i] <= '9')
     78                 {
     79                     g.DrawString(ch[i].ToString(), f, r, 8 + (i * 12), 3);
     80                 }
     81                 else
     82                 {
     83                     g.DrawString(ch[i].ToString(), f, b, 3 + (i * 12), 3);
     84                 }
     85             }
     86             System.IO.MemoryStream ms = new System.IO.MemoryStream();
     87             image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
     88             HttpContext.Current.Response.Cache.SetNoStore();
     89             HttpContext.Current.Response.ClearContent();
     90             HttpContext.Current.Response.ContentType = "image/Jpeg";
     91             HttpContext.Current.Response.BinaryWrite(ms.ToArray());
     92             g.Dispose();
     93             image.Dispose();
     94         }
     95         public bool IsReusable
     96         {
     97             get
     98             {
     99                 return false;
    100             }
    101         }
    102     }
    103 }

    然后前台调用:

               <input type="text" class="yzm" id="Codes" name="Codes" maxlength="6" style=" 80px;
                            float: left;" />
                        <img id="codeimg" alt="验证码" src="/Tools/RandomCode.ashx" title="点击" style=" margin-bottom:-5px; cursor:pointer;"
                             onclick="EditCode(this)"/>

    脚本点击事件:

     function EditCode() {
            document.getElementById("codeimg").src="/Tools/RandomCode.ashx?id="+Math.random();
        }

    在就是后台验证就可以了:

     1           if (Session["CheckCode"] != null)
     2                 {
     3                     if (Codes.ToLower() != Session["CheckCode"].ToString().ToLower())
     4                     {
     5                         Message = "验证码输入错误,请输入正确的验证码!";
     6                         return Json(new { Success = b, ErrorMessage = Message }, JsonRequestBehavior.AllowGet);
     7                     }
     8                 }
     9                 else
    10                 {
    11                     Message = "验证码输入错误,请输入正确的验证码!";
    12                     return Json(new { Success = b, ErrorMessage = Message }, JsonRequestBehavior.AllowGet);
    13                 }

    效果就是这样了,验证码个数可以调整:

  • 相关阅读:
    阅读笔记03
    第十三周总结
    阅读笔记02
    第十二周总结
    第十一周总结
    阅读笔记01
    阅读笔记3
    第十一周总结
    阅读笔记
    HDFS-学习总结
  • 原文地址:https://www.cnblogs.com/wt-vip/p/5951760.html
Copyright © 2011-2022 走看看