程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 驗證碼--漢字

驗證碼--漢字

編輯:.NET實例教程

using System.Drawing;
using System.IO;
using System.Text;
public partial class check : System.Web.UI.Page
...{
    private void Page_Load(object sender, System.EventArgs e)
    ...{

        //獲取GB2312編碼頁(表)  
        Encoding gb = Encoding.GetEncoding("gb2312");

        //調用函數產生4個隨機中文漢字編碼  
        object[] bytes = CreateRegionCode(4);

        //根據漢字編碼的字節數組解碼出中文漢字  
        string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));
        string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));
        string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));
        string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[])));

        drawPic(str1 + str2 + str3 + str4);
    }
    protected void drawPic(string str)
 ...{


        Session["va"] = str;
        Session.Timeout = 1;
        int width = 100, height = 26;
        Bitmap b = new Bitmap(width, height);
        Graphics g = Graphics.FromImage(b);
        Stream imgDate = new MemoryStream();
        g.Clear(Color.Snow);
        g.DrawRectangle(Pens.Bisque, 0, 0, width, height);
        g.DrawString(str, new Font("CourIEr New", 12, FontStyle.Bold), new SolidBrush(Color.FromArgb(125, 89, 61)), 6, 6);

        g.Dispose();
        Response.ContentType = "image/gif";
        b.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
    }


    public static object[] CreateRegionCode(int strlength)
    ...{
        //定義一個字符串數組儲存漢字編碼的組成元素  
        string[] rBase = new String[16] ...{ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

    Random rnd = new Random();

        //定義一個object數組用來  
        object[] bytes = new object[strlength];

        /**//**/
        /**//**/
        /**//**/
        /**//*每循環一次產生一個含兩個元素的十六進制字節數組,並將其放入bject數組中  
         每個漢字有四個區位碼組成  
         區位碼第1位和區位碼第2位作為字節數組第一個元素  
         區位碼第3位和區位碼第4位作為字節數組第二個元素  
        */
        for (int i = 0; i < strlength; i++)
    ...{
            //區位碼第1位  
            int r1 = rnd.Next(11, 14);
            string str_r1 = rBase[r1].Trim();

            //區位碼第2位  
            rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);//更換隨機數發生器的種子避免產生重復值  
            rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);

            int r2;
            if (r1 == 13)
            ...{
                r2 = rnd.Next(0, 7);
            }
            else
            ...{
                r2 = rnd.Next(0, 16);
            }
            string str_r2 = rBase[r2].Trim();

            //區位碼第3位  
            rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);
            int r3 = rnd.Next(10, 16);
    string str_r3 = rBase[r3].Trim();

            //區位碼第4位  
            rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
            int r4;
            if (r3 == 10)
            ...{
                r4 = rnd.Next(1, 16);
            }
            else if (r3 == 15)
            ...{
                r4 = rnd.Next(0, 15);
            }
            else
            ...{
                r4 = rnd.Next(0, 16);
            }
            string str_r4 = rBase[r4].Trim();

            //定義兩個字節變量存儲產生的隨機漢字區位碼  
            byte byte1 = Convert.ToByte(str_r1 + str_r2, 16);
            byte byte2 = Convert.ToByte(str_r3 + str_r4, 16);
            //將兩個字節變量存儲在字節數組中  
            byte[] str_r = new byte[] ...{ byte1, byte2 };

            //將產生的一個漢字的字節數組放入object數組中  
            bytes.SetValue(str_r, i);

        }

        return bytes;

    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved