時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)
最終效果如圖:
???
CheckCode.aspx.cs代碼如下
1??? protected void Page_Load(object sender, EventArgs e)
2??? {
3? //獲取GB2312編碼頁(yè)(表)
4? /**//**
5?? * 生成中文驗(yàn)證驗(yàn)碼所要使用的方法
6?? * 注,生成中文驗(yàn)證碼時(shí)要改變一下生成驗(yàn)證碼圖片的寬度
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? /**/////調(diào)用函數(shù)產(chǎn)生4個(gè)隨機(jī)中文漢字編碼
13? //object[] bytes = CreateRegionCode(4);
14
15? /**/////根據(jù)漢字編碼的字節(jié)數(shù)組解碼出中文漢字
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());????? //生成數(shù)字英文所要使用的方法
23??? }
24
25??? 生成漢字驗(yàn)證碼#region 生成漢字驗(yàn)證碼
26??? /**////
27??? /// 此函數(shù)在漢字編碼范圍內(nèi)隨機(jī)創(chuàng)建含兩個(gè)元素的十六進(jìn)制字節(jié)數(shù)組,每個(gè)字節(jié)數(shù)組代表一個(gè)漢字,并將四個(gè)字節(jié)數(shù)組存儲(chǔ)在object數(shù)組中。
28??? ///
29??? /// 代表需要產(chǎn)生的漢字個(gè)數(shù)
30??? ///
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? /**//*每循環(huán)一次產(chǎn)生一個(gè)含兩個(gè)元素的十六進(jìn)制字節(jié)數(shù)組,并將其放入bject數(shù)組中
42?? 每個(gè)漢字有四個(gè)區(qū)位碼組成
43?? 區(qū)位碼第1位和區(qū)位碼第2位作為字節(jié)數(shù)組第一個(gè)元素
44?? 區(qū)位碼第3位和區(qū)位碼第4位作為字節(jié)數(shù)組第二個(gè)元素
45? */
46
47? for (int i = 0; i < strLength; i++)
48? {
49????? //區(qū)位碼第1位
50????? var r1 = random.Next(11, 14);
51????? var str_r1 = rBase[r1].Trim();
52
#p#副標(biāo)題#e#
53????? random = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);?? //更換隨機(jī)數(shù)發(fā)生器的種子避免產(chǎn)生重復(fù)值
54
55????? var r2 = 0;
56????? if (r1 == 13)
57??? r2 = random.Next(0, 7);
58????? else
59??? r2 = random.Next(0, 16);
60
61????? var str_r2 = rBase[r2].Trim();
62
63????? //區(qū)位碼第3位
64????? random = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);
65????? var r3 = random.Next(10, 16);
66????? var str_r3 = rBase[r3].Trim();
67
68????? //區(qū)位碼第4位
69????? random = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);
70????? var r4 = 0;
71????? if (r3 == 10)
72??? r4 = random.Next(1, 16);
73????? else if (r3 == 15)
74??? r4 = random.Next(0, 15);
75????? else
76??? r4 = random.Next(0, 16);
77
78????? var str_r4 = rBase[r4].Trim();
79
80????? var byte1 = Convert.ToByte(str_r1 + str_r2, 16);
81????? var byte2 = Convert.ToByte(str_r3 + str_r4, 16);
82????? //將兩個(gè)字節(jié)變量存儲(chǔ)在字節(jié)數(shù)組中
83????? var str_r = new[] { byte1, byte2 };
84
85????? //將產(chǎn)生的一個(gè)漢字的字節(jié)數(shù)組放入object數(shù)組中
86????? bytes.SetValue(str_r, i);
87????
關(guān)鍵詞標(biāo)簽:.NET,中英文驗(yàn)證碼
相關(guān)閱讀
熱門(mén)文章 誅仙3飛升任務(wù)怎么做-誅仙3飛升任務(wù)流程最新2022 鐘離圣遺物推薦-原神鐘離圣遺物詞條 解決方法:應(yīng)用程序“DEFAULT WEB SITE”中的服務(wù)器錯(cuò)誤 使用aspnet_regiis.exe 重新注冊(cè).NET Framework
人氣排行 誅仙3飛升任務(wù)怎么做-誅仙3飛升任務(wù)流程最新2022 asp.net表單提交方法GET\POST 在ASP.NET中如何判斷用戶IE瀏覽器的版本 Asp.net中messagebox的實(shí)現(xiàn)方法 Asp.net中的web.config配置 在ASP.NET MVC中實(shí)現(xiàn)大文件異步上傳 asp.net獲取URL和IP地址 FileUpload上傳多文件出現(xiàn)錯(cuò)誤的解決方法