zoukankan      html  css  js  c++  java
  • 3种验证码示例(代码)(数字,数字字母混和,汉字)

    abcc

    Default.aspx

       1: <table> 
       2:   <tr>
       3:           <td class="style1">
       4:               &nbsp;(验证码测试)</td>
       5:           <td>
       6:           &nbsp; <asp:Label
       7:                   ID="Label1" runat="server"></asp:Label>
       8:           &nbsp;
       9:               <asp:Image ID="Image1" runat="server" Height="22px" ImageUrl="~/ValidNums.aspx" Width="58px" />&nbsp;
      10:               <asp:Image ID="Image2" runat="server" Height="22px" ImageUrl="~/GetValid.aspx" Width="58px" /></td>
      11:       </tr>  <tr>
      12:           <td class="style1">
      13:               &nbsp;
      14:           </td>
      15:           <td>
      16:               &nbsp;&nbsp;<asp:Button ID="Button1" runat="server" Text="登录" OnClick="btnOK_Click" />
      17:               &nbsp;&nbsp;
      18:               <asp:Button ID="Button2" runat="server" Text="取消" />
      19:           </td>
      20:       </tr>
      21:   </table> 
       1: using System;
       2: using System.Collections.Generic;
       3: using System.Linq;
       4: using System.Web;
       5: using System.Web.UI;
       6: using System.Web.UI.WebControls;
       7:  
       8: public partial class _Default : System.Web.UI.Page
       9: {
      10:     protected void Page_Load(object sender, EventArgs e)
      11:     {
      12:         if (!Page.IsPostBack)
      13:         {
      14:             string getNums = GetVali();
      15:             Label1.Text = getNums;
      16:         }
      17:     }  
      18:     
      19:     /// <summary>
      20:     /// 随机生成4位数
      21:     /// </summary>
      22:     /// <returns>返回生成的随机数</returns>
      23:     public string GetVali()
      24:     {
      25:         string strsvali = "0,1,2,3,4,5,6,7,8,9";
      26:         string[] ValiArray = strsvali.Split(',');
      27:         string ReturnNum = "";
      28:         int nums = -1;
      29:         Random vrand = new Random();
      30:         for (int n = 1; n < 5; n++)
      31:         {
      32:             if (nums != -1)
      33:             {
      34:                 vrand = new Random(n * nums * unchecked((int)DateTime.Now.Ticks));
      35:             }
      36:             int t = vrand.Next(10);
      37:             nums = t;
      38:             ReturnNum += ValiArray[t];
      39:         }
      40:         Session["Valid"] = ReturnNum;
      41:         return ReturnNum;
      42:     }
      43:     protected void btnOK_Click(object sender, EventArgs e)
      44:     {
      45:         if (Session["Valid"].ToString() == TextBox3.Text)
      46:         { 
      47:             ClientScript.RegisterStartupScript(this.GetType(),"ss","<script>alert('您已经成功通过登录验证!')</script>");
      48:         }
      49:         else
      50:         {
      51:             ClientScript.RegisterStartupScript(this.GetType(), "ss", "<script>alert('您输入的验证码错误!')</script>");
      52:         }
      53:     }
      54: }

    GetValid.aspx

    (可以直接将该页面作为源赋值给ImageUrl)

    前台为空,后台代码如下:

       1: using System;
       2: using System.Collections;
       3: using System.Configuration;
       4: using System.Data;
       5: using System.Linq;
       6: using System.Web;
       7: using System.Web.Security;
       8: using System.Web.UI;
       9: using System.Web.UI.HtmlControls;
      10: using System.Web.UI.WebControls;
      11: using System.Web.UI.WebControls.WebParts;
      12: using System.Xml.Linq;
      13: using System.Text;
      14: using System.Drawing;
      15:  
      16: public partial class GetValid : System.Web.UI.Page
      17: {
      18:     protected void Page_Load(object sender, EventArgs e)
      19:     {
      20:         if (!IsPostBack)
      21:         {
      22:             string validateNum = GetValids();                 //成生4位随机字符串
      23:             CreateImage(validateNum);                         //将生成的随机字符串绘成图片
      24:             Session["ValidNums"] = validateNum;               //保存验证码
      25:         }
      26:     }
      27:     public static  string GetValids()
      28:     {
      29:         //获取GB2312编码页(表)     
      30:         Encoding gb = Encoding.GetEncoding("gb2312");
      31:  
      32:         //调用函数产生4个随机中文汉字编码     
      33:         object[] bytes = CreateRegionCode(4);
      34:  
      35:         //根据汉字编码的字节数组解码出中文汉字   
      36:  
      37:         string s = String.Empty;
      38:         foreach (object byt in bytes)
      39:         {
      40:             string str1 = gb.GetString((byte[])Convert.ChangeType(byt, typeof(byte[])));
      41:             s = s + str1;
      42:         }
      43:  
      44:         //输出的控制台     
      45:         return s;
      46:     }
      47:     public static object[] CreateRegionCode(int strlength)
      48:     {
      49:         //定义一个字符串数组储存汉字编码的组成元素     
      50:         string[] rBase = new String[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
      51:  
      52:         Random rnd = new Random();
      53:  
      54:         //定义一个object数组用来     
      55:         object[] bytes = new object[strlength];
      56:         /*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中     
      57:          每个汉字有四个区位码组成     
      58:           区位码第1位和区位码第2位作为字节数组第一个元素     
      59:           区位码第3位和区位码第4位作为字节数组第二个元素     
      60:          */
      61:         for (int i = 0; i < strlength; i++)
      62:         {
      63:             //区位码第1位     
      64:             int r1 = rnd.Next(11, 14);
      65:             string str_r1 = rBase[r1].Trim();
      66:  
      67:             //区位码第2位     
      68:             rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);
      69:             //更换随机数发生器的种子避免产生重复值     
      70:             int r2;
      71:             if (r1 == 13)
      72:             {
      73:                 r2 = rnd.Next(0, 8);
      74:             }
      75:             else
      76:             {
      77:                 r2 = rnd.Next(0, 16);
      78:             }
      79:             string str_r2 = rBase[r2].Trim();
      80:  
      81:             //区位码第3位     
      82:             rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);
      83:             int r3 = rnd.Next(10, 16);
      84:             string str_r3 = rBase[r3].Trim();
      85:  
      86:             //区位码第4位     
      87:             rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
      88:             int r4;
      89:             if (r3 == 10)
      90:             {
      91:                 r4 = rnd.Next(1, 16);
      92:             }
      93:             else if (r3 == 15)
      94:             {
      95:                 r4 = rnd.Next(0, 15);
      96:             }
      97:             else
      98:             {
      99:                 r4 = rnd.Next(0, 16);
     100:             }
     101:             string str_r4 = rBase[r4].Trim();
     102:  
     103:             //定义两个字节变量存储产生的随机汉字区位码     
     104:             byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);
     105:             byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);
     106:             //将两个字节变量存储在字节数组中     
     107:             byte[] str_r = new byte[] { byte1, byte2 };
     108:  
     109:             //将产生的一个汉字的字节数组放入object数组中     
     110:             bytes.SetValue(str_r, i);
     111:  
     112:         }
     113:  
     114:         return bytes;
     115:  
     116:     }
     117:         //生成图片
     118:     private void CreateImage(string validateNum)
     119:     {
     120:         if (validateNum == null || validateNum.Trim() == String.Empty)
     121:             return;
     122:         //生成Bitmap图像
     123:         System.Drawing.Bitmap image = new System.Drawing.Bitmap(validateNum.Length * 12 + 10, 22);
     124:         Graphics g = Graphics.FromImage(image);
     125:  
     126:         try
     127:         {
     128:             //生成随机生成器 
     129:             Random random = new Random();
     130:  
     131:             //清空图片背景色 
     132:             g.Clear(Color.White);
     133:  
     134:             //画图片的背景噪音线 
     135:             for (int i = 0; i < 25; i++)
     136:             {
     137:                 int x1 = random.Next(image.Width);
     138:                 int x2 = random.Next(image.Width);
     139:                 int y1 = random.Next(image.Height);
     140:                 int y2 = random.Next(image.Height);
     141:  
     142:                 g.DrawLine(new Pen(Color.Coral), x1, y1, x2, y2);
     143:             }
     144:  
     145:             Font font = new System.Drawing.Font("Arial", 8);
     146:             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);
     147:             g.DrawString(validateNum, font, brush, 2, 2);
     148:  
     149:             //画图片的前景噪音点 
     150:             for (int i = 0; i < 100; i++)
     151:             {
     152:                 int x = random.Next(image.Width);
     153:                 int y = random.Next(image.Height);
     154:                 image.SetPixel(x, y, Color.FromArgb(random.Next()));
     155:             }
     156:  
     157:             //画图片的边框线 
     158:             g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
     159:  
     160:             System.IO.MemoryStream ms = new System.IO.MemoryStream();
     161:             //将图像保存到指定的流
     162:             image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
     163:             Response.ClearContent();
     164:             Response.ContentType = "image/Gif";
     165:             Response.BinaryWrite(ms.ToArray());
     166:         }
     167:         finally
     168:         {
     169:             g.Dispose();
     170:             image.Dispose();
     171:         }
     172:     }
     173: }

    ValidNums.aspx

    (可以直接将该页面作为源赋值给ImageUrl)

    前台为空,后台代码如下:

       1: using System;
       2: using System.Collections;
       3: using System.Configuration;
       4: using System.Data;
       5: using System.Linq;
       6: using System.Web;
       7: using System.Web.Security;
       8: using System.Web.UI;
       9: using System.Web.UI.HtmlControls;
      10: using System.Web.UI.WebControls;
      11: using System.Web.UI.WebControls.WebParts;
      12: using System.Xml.Linq;
      13: using System.Drawing;
      14:  
      15: public partial class ValidNums : System.Web.UI.Page
      16: {
      17:     protected void Page_Load(object sender, EventArgs e)
      18:     {
      19:         if (!IsPostBack)
      20:         {
      21:             string validateNum = CreateRandomNum(4);          //成生4位随机字符串
      22:             CreateImage(validateNum);                         //将生成的随机字符串绘成图片
      23:             Session["ValidNums"] = validateNum;               //保存验证码
      24:         }
      25:     }
      26:     //生成随机字符串
      27:     private string CreateRandomNum(int NumCount)
      28:     {
      29:         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";
      30:         string[] allCharArray = allChar.Split(',');//拆分成数组
      31:         string randomNum = "";
      32:         int temp = -1;//记录上次随机数的数值,尽量避免产生几个相同的随机数
      33:         Random rand = new Random();
      34:         for (int i = 0; i < NumCount; i++)
      35:         {
      36:             if (temp != -1)
      37:             {
      38:                 rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
      39:             }
      40:             int t = rand.Next(35);
      41:             if (temp == t)
      42:             {
      43:                 return CreateRandomNum(NumCount);
      44:             }
      45:             temp = t;
      46:             randomNum += allCharArray[t];
      47:         }
      48:         return randomNum;
      49:     }
      50:     //生成图片
      51:     private void CreateImage(string validateNum)
      52:     {
      53:         if (validateNum == null || validateNum.Trim() == String.Empty)
      54:             return;
      55:         //生成Bitmap图像
      56:         System.Drawing.Bitmap image = new System.Drawing.Bitmap(validateNum.Length * 12 + 10, 22);
      57:         Graphics g = Graphics.FromImage(image);
      58:  
      59:         try
      60:         {
      61:             //生成随机生成器 
      62:             Random random = new Random();
      63:  
      64:             //清空图片背景色 
      65:             g.Clear(Color.White);
      66:  
      67:             //画图片的背景噪音线 
      68:             for (int i = 0; i < 25; i++)
      69:             {
      70:                 int x1 = random.Next(image.Width);
      71:                 int x2 = random.Next(image.Width);
      72:                 int y1 = random.Next(image.Height);
      73:                 int y2 = random.Next(image.Height);
      74:  
      75:                 g.DrawLine(new Pen(Color.Coral), x1, y1, x2, y2);
      76:             }
      77:  
      78:             Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
      79:             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);
      80:             g.DrawString(validateNum, font, brush, 2, 2);
      81:  
      82:             //画图片的前景噪音点 
      83:             for (int i = 0; i < 100; i++)
      84:             {
      85:                 int x = random.Next(image.Width);
      86:                 int y = random.Next(image.Height);
      87:                 image.SetPixel(x, y, Color.FromArgb(random.Next()));
      88:             }
      89:  
      90:             //画图片的边框线 
      91:             g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
      92:  
      93:             System.IO.MemoryStream ms = new System.IO.MemoryStream();
      94:             //将图像保存到指定的流
      95:             image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
      96:             Response.ClearContent();
      97:             Response.ContentType = "image/Gif";
      98:             Response.BinaryWrite(ms.ToArray());
      99:         }
     100:         finally
     101:         {
     102:             g.Dispose();
     103:             image.Dispose();
     104:         }
     105:     }
     106: }

    以上是3种验证码的全部代码。

    另外也可以使用ashx请求验证码的方式,本示例仅使用Session存值处理。

  • 相关阅读:
    contentWindow,contentDocument, docuemnt ,window,self,top,parent,opener的关系
    我总结有用的WEB工具站点
    谈谈checkbox的几种状态
    第一章-CSS和文档 ---@import 命令
    第一章-CSS和文档 ---元素
    js的几种简单排序算法及其效率实测
    js高程(二)-----继承
    js高程(一)-----创建对象的几种模式
    event.target
    百度前端技术学院--热身题
  • 原文地址:https://www.cnblogs.com/jx270/p/2741973.html
Copyright © 2011-2022 走看看