本人在論壇調試中出現的各種驗證碼問題及解決方法
1、把字母加入驗證碼字符集里,可是怎么無法通過驗證???
如:Const cCharSet = "0123456789ABC"
這是因為在Dv_ClsMain.asp中存在一段有問題的代碼,導致字母的驗證碼不能正確判斷所致
這個問題應該在7.1的時候就已經解決了呀。
CodeStr=Lcase(Trim(Request("CodeStr")))
這段代碼令得讀來的信息被小寫了
而下一段代碼:
If CStr(Session("GetCode"))=CStr(CodeStr) And CodeStr<>"" Then
比較的時候卻沒有把Session的內容小寫化
可以在兩個地方修改(二選其一,看個人愛好)
一、改Dv_ClsMain.asp
If CStr(Session("GetCode"))=CStr(CodeStr) And CodeStr<>"" Then
改為:
If CStr(LCase(Session("GetCode")))=CStr(CodeStr) And CodeStr<>"" Then
二、改Dv_GetCode.asp
Session(pSN) = DigtalStr '記錄入Session
改為:
Session(pSN) = LCase(DigtalStr) '記錄入Session
2、【動網驗證碼字母矢量庫的擴展】
動網7.1與7.0相比,在驗證碼上作了大改動。7.0使用的是一個現成的MBP圖庫,內含0-9十個數字的圖形信息(每個圖形都是10*10像數)。因為這十個數字毫無變化,破解的起來還是比較容易的。
到了7.1,至少在以下方面有了變化:一是用失量庫代替點陣庫,這樣可以產生任意尺寸的驗證碼圖片;二是字符串長度不僅局限于4個字節,可以使用任意長度,三是增加了變形和噪點處理,即使同一個字符重復出現,也可以產生不同的圖片,四是字符集不僅僅局限在十個數字,而可以擴展到其它字符,甚至連漢字也不在話下。
但是,動網的程序中只提供了10個數字和“ABCD”四個字母的失量圖庫,并在字母“A”失量庫開始前留下這樣一句注釋:“以下為字母的矢量動作,有興趣的可以繼續”,也就是說如果你不動手擴展,就只能使用由這14個字符組成的字符集。
本人懷著對動網的無限敬仰和濃厚興趣,動手擴展了這個失量庫,將26個大寫字母弄全了。
在動手之前,有個問題必須先說明:一量引用字母,就必須正視數字“0”與字母“O”、數字“6”與字母“G”因為字形相近而產生的影響。字母“G”我可以設計得跟“6”不一致,但是字母“O”怎么設計都是一個圓圈,于是只好改它的數字“0”了——給它加上一條右上至左下的斜線。于是,數字“0”的失量庫完整如下:
'==========代碼開始==========
CDGen_SetDirection -60' 逆時針60度(相對于垂直線)
CDGen_FowardDraw -0.7' 反方向繪制0.7個單位
CDGen_SetDirection -60' 逆時針60度
CDGen_FowardDraw -0.7' 反方向繪制0.7個單位
CDGen_SetDirection 120' 順時針120度
CDGen_FowardDraw 1.5' 繪制1.5個單位
CDGen_SetDirection -60' 逆時針60度
CDGen_FowardDraw 0.7' 繪制0.7個單位
CDGen_SetDirection -60' 順時針120度
CDGen_FowardDraw 0.7' 繪制0.7個單位
CDGen_Close 0' 封閉當前筆與第0筆(0開始)
'添加一條斜線,以免與字母O混淆()
CDGen_MoveToMiddle 2, 100' 移動畫筆的位置到第3筆(0開始)的結尾處
CDGen_CloseToMiddle 0, 0' 將當前畫筆位置與第1筆(0開始)的開端封閉
'==========代碼結束==========
在設計字母“E”的時候,考慮到三條水平線,要給它加上角度隨機量,隨機量很容易計算,如我要產生“正負20度”只要“20 - Rnd * 40”即可。但是原有的“CDGen_SetDirection”函數都是在以往的角度基礎上旋轉的,這樣在畫第二、三條水平線的時候角度會受前面的影響,比如如果三次都是正20,那最后一條線將產生60度的隨機量,于是我增加了一個函數“CDGen_SetDirectionFormZero”,它的作用是以0度為基準進行隨機量的設定,代碼如下:
'==========代碼開始==========
Sub CDGen_SetDirectionFormZero(nAngle)
'按指定角度設定畫筆方向,與CDGen_SetDirection的區別是以0度為基準
nAngle = Sgn(nAngle) * (Abs(nAngle) - nAngleRandom + Rnd * nAngleRandom * 2) / 180 * 3.1415926
DirX = - Sin(nAngle)
DirY = Cos(nAngle)
End Sub
'==========代碼結束==========
下面就可以去補充其它字母的失量庫了,代碼如下:
'==========代碼開始==========
Case "E"
CDGen_SetDirection -(Rnd * 20 - 10)
CDGen_FowardDraw 1
CDGen_MoveToMiddle 0, 0
CDGen_SetDirectionFormZero -(110 - Rnd * 40)
CDGen_FowardDraw 0.7
CDGen_MoveToMiddle 0, 50
CDGen_SetDirectionFormZero -(110 - Rnd * 40)
CDGen_FowardDraw 0.5
CDGen_MoveToMiddle 0, 100
CDGen_SetDirectionFormZero -(110 - Rnd * 40)
CDGen_FowardDraw 0.9
Case "F"
CDGen_SetDirection -(Rnd * 20 - 10)
CDGen_FowardDraw 1
CDGen_MoveToMiddle 0, 0
CDGen_SetDirectionFormZero -(110 - Rnd * 40)
CDGen_FowardDraw 0.7
CDGen_MoveToMiddle 0, 50
CDGen_SetDirectionFormZero -(110 - Rnd * 40)
CDGen_FowardDraw 0.5
Case "G"
CDGen_SetDirection -60
CDGen_FowardDraw -0.7
CDGen_SetDirection -60
CDGen_FowardDraw -0.7
CDGen_SetDirection 120
CDGen_FowardDraw 1.5
CDGen_SetDirection 120
CDGen_FowardDraw -0.7
CDGen_SetDirection 120
CDGen_FowardDraw 0.7
CDGen_SetDirection -60
CDGen_FowardDraw 0.5
CDGen_SetDirection 90
CDGen_FowardDraw 0.4
CDGen_MoveToMiddle 6, 0
CDGen_SetDirection 180
CDGen_FowardDraw 0.4
Case "H"
CDGen_SetDirection -(Rnd * 20 - 10)
CDGen_FowardDraw 1
CDGen_MoveToMiddle 0, 50
CDGen_SetDirection -90
CDGen_FowardDraw 1
CDGen_MoveToMiddle 1, 100
CDGen_SetDirection -90
CDGen_FowardDraw 0.5
CDGen_MoveToMiddle 1, 100
CDGen_SetDirection 180
CDGen_FowardDraw 0.5
Case "I"
CDGen_SetDirection -(Rnd * 20 - 10)
CDGen_FowardDraw 1
CDGen_MoveToMiddle 0, 0
CDGen_SetDirection -90
CDGen_FowardDraw 0.2
CDGen_MoveToMiddle 0, 0
CDGen_SetDirection 180
CDGen_FowardDraw 0.2
CDGen_MoveToMiddle 0, 100
CDGen_FowardDraw 0.2
CDGen_MoveToMiddle 0, 100
CDGen_SetDirection 180
CDGen_FowardDraw 0.2
Case "J"
CDGen_SetDirection -90
CDGen_FowardDraw 0.4
CDGen_MoveToMiddle 0, 50
CDGen_SetDirection 90
CDGen_FowardDraw 0.6
CDGen_SetDirection 60
CDGen_FowardDraw 0.5
CDGen_SetDirection 120
CDGen_FowardDraw 0.5
Case "K"
CDGen_SetDirection -(Rnd * 20 - 10)
CDGen_FowardDraw 1
CDGen_MoveToMiddle 0, 50
CDGen_SetDirection -60
CDGen_FowardDraw 0.6
CDGen_MoveToMiddle 0, 50
CDGen_SetDirection -60
CDGen_FowardDraw 0.6
Case "L"
CDGen_SetDirection -90
CDGen_FowardDraw 0.2
CDGen_MoveToMiddle 0, 50
CDGen_SetDirectionFormZero -(Rnd * 20 - 10)
CDGen_FowardDraw 1
CDGen_SetDirection -(110 - Rnd * 40)
CDGen_FowardDraw 0.8
CDGen_SetDirectionFormZero 0
CDGen_FowardDraw -0.3
Case "M"
CDGen_SetDirection 0
CDGen_FowardDraw -1
CDGen_SetDirection -30
CDGen_FowardDraw 0.5
CDGen_SetDirection 60
CDGen_FowardDraw -0.5
CDGen_SetDirection -30
CDGen_FowardDraw 1
Case "N"
CDGen_SetDirection 0
CDGen_FowardDraw -1
CDGen_SetDirection -45
CDGen_FowardDraw 1.4
CDGen_SetDirection 45
CDGen_FowardDraw -1
Case "O"
CDGen_SetDirection -60
CDGen_FowardDraw -0.7
CDGen_SetDirection -60
CDGen_FowardDraw -0.7
CDGen_SetDirection 120
CDGen_FowardDraw 1.5
CDGen_SetDirection -60
CDGen_FowardDraw 0.7
CDGen_SetDirection -60
CDGen_FowardDraw 0.7
CDGen_Close 0
Case "P"
CDGen_SetDirection 0
CDGen_FowardDraw -1
CDGen_SetDirection -60
CDGen_FowardDraw 0.5
CDGen_SetDirection 60
CDGen_FowardDraw 0.5
CDGen_CloseToMiddle 0, 50
Case "Q"
CDGen_SetDirection -60
CDGen_FowardDraw -0.7
CDGen_SetDirection -60
CDGen_FowardDraw -0.7
CDGen_SetDirection 120
CDGen_FowardDraw 1.5
CDGen_SetDirection -60
CDGen_FowardDraw 0.7
CDGen_SetDirection -60
CDGen_FowardDraw 0.7
CDGen_Close 0
CDGen_MoveToMiddle 4, 100
CDGen_SetDirectionFormZero -45
CDGen_FowardDraw 0.7
CDGen_MoveToMiddle 4, 100
CDGen_SetDirection 180
CDGen_FowardDraw 0.7
Case "R"
CDGen_SetDirection 0
CDGen_FowardDraw -1
CDGen_SetDirection -80
CDGen_FowardDraw 0.5
CDGen_SetDirection 60
CDGen_FowardDraw 0.5
CDGen_CloseToMiddle 0, 50
CDGen_SetDirectionFormZero -45
CDGen_FowardDraw 0.7
Case "S"
CDGen_SetDirection -45
CDGen_FowardDraw -0.5
CDGen_SetDirection -90
CDGen_FowardDraw -0.5
CDGen_SetDirection 90
CDGen_FowardDraw 1
CDGen_SetDirection 90
CDGen_FowardDraw 0.5
CDGen_SetDirection 90
CDGen_FowardDraw 0.5
Case "T"
CDGen_SetDirection -90
CDGen_FowardDraw 0.8
CDGen_MoveToMiddle 0, 50
CDGen_SetDirection 90
CDGen_FowardDraw 1
CDGen_MoveToMiddle 0, 0
CDGen_SetDirection 30
CDGen_FowardDraw 0.5
CDGen_MoveToMiddle 0, 100
CDGen_SetDirection -60
CDGen_FowardDraw 0.5
Case "U"
CDGen_FowardDraw 1
CDGen_SetDirection -60
CDGen_FowardDraw 0.6
CDGen_SetDirection -60
CDGen_FowardDraw 0.6
CDGen_SetDirection -60
CDGen_FowardDraw 1
Case "V"
CDGen_SetDirection -30
CDGen_FowardDraw 1.5
CDGen_SetDirection 60
CDGen_FowardDraw -1.5
Case "W"
CDGen_SetDirection -30
CDGen_FowardDraw 1.5
CDGen_SetDirection 60
CDGen_FowardDraw -1
CDGen_SetDirection -60
CDGen_FowardDraw 1
CDGen_SetDirection 60
CDGen_FowardDraw -1.5
Case "X"
CDGen_SetDirection -45
CDGen_FowardDraw 1.4
CDGen_MoveToMiddle 0, 50
CDGen_SetDirection 90
CDGen_FowardDraw 0.7
CDGen_MoveToMiddle 0, 50
CDGen_FowardDraw -0.7
Case "Y"
CDGen_SetDirection -30
CDGen_FowardDraw 0.5
CDGen_SetDirection 60
CDGen_FowardDraw -0.5
CDGen_MoveToMiddle 0, 100
CDGen_SetDirection -30
CDGen_FowardDraw 0.5
Case "Z"
CDGen_SetDirection -90
CDGen_FowardDraw 1
CDGen_SetDirection -45
CDGen_FowardDraw -1.4
CDGen_SetDirection 45
CDGen_FowardDraw 1
3、動網BBS8.0驗證碼看不清楚的修改方法
用記事本打開Dv_GetCode.asp文件,把上面幾行的個別數值修改為(紅色為修改后的,其他的不變):
Const nMaxSaturation = 100 ' 最大色彩飽和度
Const nBlankNoisyDotOdds = 0' 空白處噪點率
Const nColorNoisyDotOdds = 0 ' 有色處噪點率
Const nCharCount = 4 ' 產生的字符個數
Const nPixelWidth = 20 ' 單個字符位圖的寬度
Const nPixelHeight = 20 ' 單個字符位圖的高度
Const nColorHue = 220 ' 顯示驗證碼的色調(-1表示隨機色調, -2表示灰度色調)
Const nAngleRandom = 0 ' 角度隨機量
Const nLengthRandom = 0 ' 長度隨機量(百分比)
希望對你有用!
新聞熱點
疑難解答