当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

.NET实现中英文验证码

  最终效果如图:

   

  CheckCode.aspx.cs代码如下

  1    protected void Page_Load(object sender, EventArgs e)

  2    {

  3        //获取GB2312编码页(表)

  4        /**//**

  5         * 生成中文验证验码所要使用的方法

  6         * 注,生成中文验证码时要改变一下生成验证码图片的宽度

  7         * var imageCode = new System.Drawing.Bitmap((int)Math.Ceiling((code.Length * 22.5)), 23); //定义图片的宽度和高度

  8         **/

  9

  10        //var gb = Encoding.GetEncoding("gb2312");

  11

  12        /**/////调用函数产生4个随机中文汉字编码

  13        //object[] bytes = CreateRegionCode(4);

  14

  15        /**/////根据汉字编码的字节数组解码出中文汉字

  16        //var sbCode = new StringBuilder().Append(gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[]))))

  17        //    .Append(gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[]))))

  18        //    .Append(gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[]))))

  19        //    .Append(gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[]))));

  20        //CreateCheckCodeImage(sbCode.ToString());

  21

  22        CreateCheckCodeImage(GenerateCheckCode());      //生成数字英文所要使用的方法

  23    }

  24

  25    生成汉字验证码#region 生成汉字验证码

  26    /**//// <summary>

  27    /// 此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将四个字节数组存储在object数组中。

  28    /// </summary>

  29    /// <param name="strLength">代表需要产生的汉字个数</param>

  30    /// <returns></returns>

  31    static object[] CreateRegionCode(int strLength)

  32    {

  33        var rBase = new[]

  34            {

  35                "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"

  36            };

  37

  38        var random = new Random();

  39        var bytes = new object[strLength];

  40

  41        /**//*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中

  42         每个汉字有四个区位码组成

  43         区位码第1位和区位码第2位作为字节数组第一个元素

  44         区位码第3位和区位码第4位作为字节数组第二个元素

  45        */

  46

  47        for (int i = 0; i < strLength; i++)

  48        {

  49            //区位码第1位

  50            var r1 = random.Next(11, 14);

  51            var str_r1 = rBase[r1].Trim();

  52

  53            random = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);   //更换随机数发生器的种子避免产生重复值

  54

相关内容
赞助商链接