現在qq上申請免費號碼的驗證碼是中文的,其實這個也不難,就是隨機生成乙個16進製制的陣列,然後根據編碼查詢漢字,程式如下,此為控制台程式。
1using
system;
2using
system.text;34
namespace5
14/*
17此函式在漢字編碼範圍內隨機建立含兩個元素的十六進製制位元組陣列,每個位元組陣列代表乙個漢字,並將
18四個位元組陣列儲存在object陣列中。
19引數:strlength,代表需要產生的漢字個數
*/20
21public
static
string
getgbcode(
intstrlength)
22;
2526
random rnd
=new
random();
2728
//定義乙個object陣列用來
29object
bytes
=new
object
[strlength];
30//
定義使用gb2312編碼
31encoding gb
=encoding.getencoding(
"gb2312
");
32string
str=
"",str1=""
;33
/*每迴圈一次產生乙個含兩個元素的十六進製制位元組陣列,並將其放入bject陣列中
34每個漢字有四個區位碼組成
35區位碼第1位和區位碼第2位作為位元組陣列第乙個元素
36區位碼第3位和區位碼第4位作為位元組陣列第二個元素
*/37
for(
inti=0
;i<
strlength;i
++) 38
50else51
54string
str_r2
=rbase[r2].trim();
5556
//區位碼第3位
57rnd
=new
random(r2
*unchecked
((int
)datetime.now.ticks)
+i);
58intr3=
rnd.next(10,
16);
59string
str_r3
=rbase[r3].trim();
6061
//區位碼第4位
62rnd
=new
random(r3
*unchecked
((int
)datetime.now.ticks)
+i);
63int
r4;
64if
(r3==
10) 65
68else
if(r3
==15
) 69 72
else73
76string
str_r4
=rbase[r4].trim();
7778
//定義兩個位元組變數儲存產生的隨機漢字區位碼
79byte
byte1
=convert.tobyte(str_r1
+str_r2,
16);
80byte
byte2
=convert.tobyte(str_r3
+str_r4,
16);
81//
將兩個位元組變數儲存在位元組陣列中
82byte
str_r
=new
byte
; 83
84//
將產生的乙個漢字的位元組陣列放入object陣列中
85bytes.setvalue(str_r,i);
86//
根據byte中的區位碼來查詢字
87str1
=gb.getstring((
byte
)convert.changetype(bytes[i],
typeof
(byte
)));
88str
=str
+str1; 89}
90return
str;
91}
92} 93}
實現了隨機生成漢字後,就可以使用.net gdi來繪製自己需要的驗證碼圖形了。具體的怎樣生成驗證碼,以及改變其中字元的長和寬等效果網上已經有很多相關的文章,這裡由於篇幅就不再介紹了。不過有一點要說明的是以上**在中文版的windows下才能執行,因為它帶有gb的字符集,如果你是其他語言的作業系統,就需要安裝gb字符集了。
驗證碼無法顯示
這段時間在寫乙個驗證碼,在我的機器上好好的,但是到了公司的電腦上就顯示 影象因其本身有錯無法顯示,這是什麼原因呢?試了好長時間還是沒辦法解決,於是就去google。網上通用的解決方法是 1 盡可能去掉中文空格 2 將 但是還是解決不了我的問題。如果你試了上面的方法還是解決不了你可以用下面的方法 在 ...
做中文驗證碼
知識點 imagettftext 用 truetype 字型向影象寫入文字 具體引數看手冊 如何產生隨機的中文字串 中文安其uniccode編碼 是有規律的 位於 0x4e00 0x9fa0 但是請注意 對於客戶來說 能否認識 所以在實際專案中 只是抽取幾百或上千的常用漢字 放陣列裡 隨機選取 選常...
php驗證碼顯示不了,php驗證碼不顯示解決方法
解決方法 2 utf 8 bom頭原因。用editplus ultraedit,刪除即可。3 輸出緩衝區中的快取問題。輸出前,使用ob clean函式解決。4 輸出前,不能出現echo print r var dump等列印,注釋或刪除解決。解決問題之後的 w 80 設定寬和高 h 26 str a...