asp漢字中文圖片驗證碼的實現代碼
2024-05-04 11:01:07
供稿:網友
'此代碼是在別人基礎上增加的漢字功能,特此感謝,同時感謝鬼火狼煙。
'以前的圖片驗證碼很容易被破解,所以在其基礎上進行改進,生成漢字,就目前而言很難破解
用法:
在需要顯示驗證碼圖片的地方插入代碼 <img src="code.asp">
同時,自動生成session("psn"),表單提交驗證session就可以了。
復制代碼 代碼如下:
<%
'------------------
'漢字圖片驗證碼
'此代碼是在別人基礎上增加的漢字功能,特此感謝,同時感謝鬼火狼煙。
'以前的圖片驗證碼很容易被破解,所以在其基礎上進行改進,生成漢字,就目前而言很難破解
'干擾次數每加一 -> 窮舉法的代價提高約100*100倍
'適當設定雜點幾率可以有效降低軟件識別正確率
'------------------
Option Explicit
Call Com_CreatValidCode("SessionName")
Rem 生成驗證碼圖片
Sub Com_CreatValidCode(pSN)
Const codeLen = 4'驗證碼位數
Const cOdds = 4 '雜點出現的機率
Const dbtTimes = 1'干擾次數(安全考慮,最好不要小于2)
Const cAmount = 85 '字庫數量
Const cCode = "好一路陽光子無開月了的比小山古天中石頭井火大西木開人也葉九七六五合文只個魚羊哈么點四生件格不步布各你田紅藍來很春下畫京左百白東關工共足方尺才夢見查著去區曲尋早可上豐愛呵劉"'字庫對應的字符
Const UnitWidth = 28'字寬(要為4的倍數)
Const UnitHeight = 28'字高
Const DotsLimit = 2'每次刪除有效點的上限(避免無法人為識別)
Const tryCount = 2'避免刪除有效點超過上限的嘗試次數限制
'-----------
Randomize
Dim i, ii, iii
' 禁止緩存
Response.Expires = -9999
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-ctrol","no-cache"
Response.ContentType = "Image/BMP"
' 顏色的數據(字符,背景)
Dim vColorData(1)
vColorData(0) = ChrB(0) & ChrB(0) & ChrB(0) ' 藍0,綠0,紅0(黑色)
vColorData(1) = ChrB(211) & ChrB(255) & ChrB(250) ' 藍250,綠236,紅211(淺藍色)
' 字符的數據(可以自己修改,如果修改了尺寸,記得把前面的設定也改了)
Dim vNumberData(85)
vNumberData(0) = "1111111111111111111111111111111111101111111111111111111111111100011111000000000000111111110001111100000000000011111111001111111111111100001111111100111111111111100001111100000000001111111100011111110000000000011111100011111111111001111001111100011111111111100111100111110001111111111110011110011111100011111111111001111001111111001111111111001111001100000000000011111100111100110000000000000111110011110011100000000000111110001111001111111111001111111000111001111111111100011111110000100111111111110001111111100000111111111111000111111111100011111111111100011111111100000011111111110001111111100011000111111111000111111000011110110001111000111110000111111111000000000011111100111111111111000000111111111111111111111111001111111111111111111111111111111111111111111111111111111111111111"