将动网论坛验证码修改为算术运算提问的验证码
維護曙光助學社論壇的過程中,原先為了發(fā)帖方便沒有啟用驗證碼,結(jié)果經(jīng)常有惡意廣告發(fā)到論壇上來,于是在注冊和發(fā)帖時啟用驗證碼,是為了抵制自動發(fā)帖機。動網(wǎng)論壇流行太廣,其原始的驗證碼程序恐怕被OCR的可能性很大,我沒有去網(wǎng)上搜,猜想應該有了。所以,為了更加安全,將驗證碼程序稍加改動,變成算術(shù)題了。
另外還有1個小改進,就是原程序顯示3、5、7這三個數(shù)字時上面的一橫經(jīng)常不清楚,我把它改的比較清楚了,方法就是在緊靠那一橫下面再畫一橫。
修改前:
修改后:(請?zhí)顚戇@個算術(shù)題的答案)
要代碼的請在博客中跟帖留下email。
?
不好意思,好長一段時間沒有上網(wǎng)來維護,因為我沒有空間可以上傳文件,只能按照大家提供的郵件發(fā)了。沒有收到的請再次索取。
附加說明:
給大家發(fā)的郵件附件中 Dv_GetCode.asp 替換同名文件,應用中,還需要修改其他地方:
1、bbs/images/post/DhtmlEdit1.js 文件的大約第114行:
找到 if (document.Dvform.codestr.value.length!=4)
改為 if (document.Dvform.codestr.value.length<1)
2、驗證碼旁邊的提示文字。相關(guān)的地方:
(1) /bbs/admin_login.asp 中的相關(guān)文字改為“(請輸入這個算術(shù)題的答案)”
(2)進入管理后臺→風格界面模板總管理→分頁面模板(page_post)??,查找“{$codestr}”,把其旁邊的驗證碼提示文字改為“(請?zhí)顚戇@個算術(shù)題的答案)”,改完后請測試效果。
動網(wǎng)8.0我沒測試過,應該沒有問題。大家看看 Dv_GetCode.asp 文件,應該明白了。
修改后的Dv_GetCode.asp 文件源碼:
Const nMaxSaturation = 100 ? ? ?' 最大色彩飽和度
Const nBlankNoisyDotOdds = 0.2 ?' 空白處噪點率
Const nColorNoisyDotOdds = 0.05 ' 有色處噪點率
Const nCharCount = 5 ? ? ? ? ? ?' 產(chǎn)生的字符個數(shù)
Const nPixelWidth = 20 ? ? ? ? ?' 單個字符位圖的寬度
Const nPixelHeight = 20 ? ? ? ? ' 單個字符位圖的高度
Const nColorHue = 220 ? ? ? ? ? ' 顯示驗證碼的色調(diào)(-1表示隨機色調(diào), -2表示灰度色調(diào))
Const nAngleRandom = 0 ? ? ? ? ?' 角度隨機量
Const nLengthRandom = 5 ? ? ? ? ' 長度隨機量(百分比)
Const cCharSet = "0123456789+-*"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 構(gòu)成驗證碼的字符集
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 如果擴充了下邊的字母矢量庫,則可以相應擴充這個字符集
Dim Buf(), DigtalStr
Dim Lines(), LineCount
Dim CursorX, CursorY, DirX, DirY
Randomize
Call CreatValidCode("GetCode")
Sub CDGen_Reset()
? ?' 復位矢量筆和環(huán)境變量
? ?LineCount = 0
? ?CursorX = 0
? ?CursorY = 0
? ?' 初始的光筆方向是垂直向下
? ?DirX = 0
? ?DirY = 1
End Sub
Sub CDGen_Clear()
? ?' 清空位圖陣列
? ?Dim i, j
? ?ReDim Buf(nPixelHeight - 1, nCharCount * nPixelWidth - 1)
? ?For j = 0 To nPixelHeight - 1
? ? ? ?For i = 0 To nCharCount * nPixelWidth - 1
? ? ? ? ? ?Buf(j, i) = 0
? ? ? ?Next
? ?Next
End Sub
Sub CDGen_PSet(X, Y)
? ?' 在位圖陣列上畫點
? ?Buf(Y, X) = 1
End Sub
Sub CDGen_Line(X1, Y1, X2, Y2)
? ?' 在位圖陣列上畫線
? ?Dim DX, DY, DeltaT, i
? ?DX = X2 - X1
? ?DY = Y2 - Y1
? ?If Abs(DX) > Abs(DY) Then DeltaT = Abs(DX) Else DeltaT = Abs(DY)
? ?For i = 0 To DeltaT
? ? ? ?CDGen_PSet X1 + DX * i / DeltaT, Y1 + DY * i / DeltaT
? ?Next
End Sub
Sub CDGen_FowardDraw(nLength)
? ?' 按當前光筆方向繪制指定長度并移動光筆,正數(shù)表示從左向右/從上向下繪制,負數(shù)表示從右向左/從下向上繪制
? ?nLength = Sgn(nLength) * Abs(nLength) * (1 - nLengthRandom / 100 + Rnd * nLenghtRandom * 2 / 100)
? ?ReDim Preserve Lines(3, LineCount)
? ?Lines(0, LineCount) = CursorX
? ?Lines(1, LineCount) = CursorY
? ?CursorX = CursorX + DirX * nLength
? ?CursorY = CursorY + DirY * nLength
? ?Lines(2, LineCount) = CursorX
? ?Lines(3, LineCount) = CursorY
? ?LineCount = LineCount + 1
End Sub
Sub CDGen_SetDirection(nAngle)
? ?' 按指定角度設定畫筆方向, 正數(shù)表示相對當前方向順時針改變方向,負數(shù)表示相對當前方向逆時針改變方向
? ?Dim DX, DY
? ?nAngle = Sgn(nAngle) * (Abs(nAngle) - nAngleRandom + Rnd * nAngleRandom * 2) / 180 * 3.1415926
? ?DX = DirX
? ?DY = DirY
? ?DirX = DX * Cos(nAngle) - DY * Sin(nAngle)
? ?DirY = DX * Sin(nAngle) + DY * Cos(nAngle)
End Sub
Sub CDGen_MoveToMiddle(nActionIndex, nPercent)
? ?' 將畫筆光標移動到指定動作的中間點上,nPercent為中間位置的百分比
? ?Dim DeltaX, DeltaY
? ?DeltaX = Lines(2, nActionIndex) - Lines(0, nActionIndex)
? ?DeltaY = Lines(3, nActionIndex) - Lines(1, nActionIndex)
? ?CursorX = Lines(0, nActionIndex) + Sgn(DeltaX) * Abs(DeltaX) * nPercent / 100
? ?CursorY = Lines(1, nActionIndex) + Sgn(DeltaY) * Abs(DeltaY) * nPercent / 100
End Sub
Sub CDGen_MoveCursor(nActionIndex)
? ?' 將畫筆光標移動到指定動作的起始點上
? ?CursorX = Lines(0, nActionIndex)
? ?CursorY = Lines(1, nActionIndex)
End Sub
Sub CDGen_Close(nActionIndex)
? ?' 將當前光筆位置與指定動作的起始點閉合并移動光筆
? ?ReDim Preserve Lines(3, LineCount)
? ?Lines(0, LineCount) = CursorX
? ?Lines(1, LineCount) = CursorY
? ?CursorX = Lines(0, nActionIndex)
? ?CursorY = Lines(1, nActionIndex)
? ?Lines(2, LineCount) = CursorX
? ?Lines(3, LineCount) = CursorY
? ?LineCount = LineCount + 1
End Sub
Sub CDGen_CloseToMiddle(nActionIndex, nPercent)
? ?' 將當前光筆位置與指定動作的中間點閉合并移動光筆,nPercent為中間位置的百分比
? ?Dim DeltaX, DeltaY
? ?ReDim Preserve Lines(3, LineCount)
? ?Lines(0, LineCount) = CursorX
? ?Lines(1, LineCount) = CursorY
? ?DeltaX = Lines(2, nActionIndex) - Lines(0, nActionIndex)
? ?DeltaY = Lines(3, nActionIndex) - Lines(1, nActionIndex)
? ?CursorX = Lines(0, nActionIndex) + Sgn(DeltaX) * Abs(DeltaX) * nPercent / 100
? ?CursorY = Lines(1, nActionIndex) + Sgn(DeltaY) * Abs(DeltaY) * nPercent / 100
? ?Lines(2, LineCount) = CursorX
? ?Lines(3, LineCount) = CursorY
? ?LineCount = LineCount + 1
End Sub
Sub CDGen_Flush(X0, Y0)
? ?' 按照當前的畫筆動作序列繪制位圖點陣
? ?Dim MaxX, MinX, MaxY, MinY
? ?Dim DeltaX, DeltaY, StepX, StepY, OffsetX, OffsetY
? ?Dim i
? ?MaxX = MinX = MaxY = MinY = 0
? ?For i = 0 To LineCount - 1
? ? ? ?If MaxX < Lines(0, i) Then MaxX = Lines(0, i)
? ? ? ?If MaxX < Lines(2, i) Then MaxX = Lines(2, i)
? ? ? ?If MinX > Lines(0, i) Then MinX = Lines(0, i)
? ? ? ?If MinX > Lines(2, i) Then MinX = Lines(2, i)
? ? ? ?If MaxY < Lines(1, i) Then MaxY = Lines(1, i)
? ? ? ?If MaxY < Lines(3, i) Then MaxY = Lines(3, i)
? ? ? ?If MinY > Lines(1, i) Then MinY = Lines(1, i)
? ? ? ?If MinY > Lines(3, i) Then MinY = Lines(3, i)
? ?Next
? ?DeltaX = MaxX - MinX
? ?DeltaY = MaxY - MinY
? ?If DeltaX = 0 Then DeltaX = 1
? ?If DeltaY = 0 Then DeltaY = 1
? ?MaxX = MinX
? ?MaxY = MinY
? ?If DeltaX > DeltaY Then
? ? ? ?StepX = (nPixelWidth - 2) / DeltaX
? ? ? ?StepY = (nPixelHeight - 2) / DeltaX
? ? ? ?OffsetX = 0
? ? ? ?OffsetY = (DeltaX - DeltaY) / 2
? ?Else
? ? ? ?StepX = (nPixelWidth - 2) / DeltaY
? ? ? ?StepY = (nPixelHeight - 2) / DeltaY
? ? ? ?OffsetX = (DeltaY - DeltaX) / 2
? ? ? ?OffsetY = 0
? ?End If
? ?For i = 0 To LineCount - 1
? ? ? ?Lines(0, i) = Round((Lines(0, i) - MaxX + OffsetX) * StepX, 0)
? ? ? ?If Lines(0, i) < 0 Then Lines(0, i) = 0
? ? ? ?If Lines(0, i) >= nPixelWidth - 2 Then Lines(0, i) = nPixelWidth - 3
? ? ? ?Lines(1, i) = Round((Lines(1, i) - MaxY + OffsetY) * StepY, 0)
? ? ? ?If Lines(1, i) < 0 Then Lines(1, i) = 0
? ? ? ?If Lines(1, i) >= nPixelHeight - 2 Then Lines(1, i) = nPixelHeight - 3
? ? ? ?Lines(2, i) = Round((Lines(2, i) - MinX + OffsetX) * StepX, 0)
? ? ? ?If Lines(2, i) < 0 Then Lines(2, i) = 0
? ? ? ?If Lines(2, i) >= nPixelWidth - 2 Then Lines(2, i) = nPixelWidth - 3
? ? ? ?Lines(3, i) = Round((Lines(3, i) - MinY + OffsetY) * StepY, 0)
? ? ? ?If Lines(3, i) < 0 Then Lines(3, i) = 0
? ? ? ?If Lines(3, i) >= nPixelHeight - 2 Then Lines(3, i) = nPixelHeight - 3
? ? ? ?CDGen_Line Lines(0, i) + X0 + 1, Lines(1, i) + Y0 + 1, Lines(2, i) + X0 + 1, Lines(3, i) + Y0 + 1
? ?Next
End Sub
Sub CDGen_Char(cChar, X0, Y0)
? ?' 在指定坐標處生成指定字符的位圖陣列
? ?CDGen_Reset
? ?Select Case cChar
? ?Case "+"
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度(相對于垂直線)
? ? ? ?CDGen_FowardDraw 1.2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.2個單位
? ? ? ?CDGen_MoveToMiddle 0, 50 ? ? ? ? ? ? ? ? ? ? ? ? ?' 移動畫筆的位置到第0筆(0開始)的50%處
? ? ? ?CDGen_SetDirection 90 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針90度
? ? ? ?CDGen_FowardDraw 0.6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.6個單位
? ? ? ?CDGen_MoveToMiddle 0, 50 ? ? ? ? ? ? ? ? ? ? ? ? ?' 移動畫筆的位置到第0筆(0開始)的50%處
? ? ? ?CDGen_FowardDraw -0.6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.6個單位
? ?Case "-"
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度(相對于垂直線)
? ? ? ?CDGen_FowardDraw 1.2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.2個單位
? ?Case "*"
? ? ? ?CDGen_SetDirection -45 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針45度(相對于垂直線)
? ? ? ?CDGen_FowardDraw 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1個單位
? ? ? ?CDGen_MoveToMiddle 0, 50 ? ? ? ? ? ? ? ? ? ? ? ? ?' 移動畫筆的位置到第0筆(0開始)的50%處
? ? ? ?CDGen_SetDirection 90 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針90度
? ? ? ?CDGen_FowardDraw 0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.5個單位
? ? ? ?CDGen_MoveToMiddle 0, 50 ? ? ? ? ? ? ? ? ? ? ? ? ?' 移動畫筆的位置到第0筆(0開始)的50%處
? ? ? ?CDGen_FowardDraw -0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.5個單位
? ?Case " "
? ?Case "="
? ?Case "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開始)
? ?Case "1"
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度(相對于垂直線)
? ? ? ?CDGen_FowardDraw 0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.5個單位
? ? ? ?CDGen_MoveToMiddle 0, 50 ? ? ? ? ? ? ? ? ? ? ? ? ?' 移動畫筆的位置到第0筆(0開始)的50%處
? ? ? ?CDGen_SetDirection 90 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 逆時針90度
? ? ? ?CDGen_FowardDraw -1.4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制1.4個單位
? ? ? ?CDGen_SetDirection 30 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 逆時針30度
? ? ? ?CDGen_FowardDraw 0.4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.4個單位
? ?Case "2"
? ? ? ?CDGen_SetDirection 45 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針45度(相對于垂直線)
? ? ? ?CDGen_FowardDraw -0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.7個單位
? ? ? ?CDGen_SetDirection -120 ? ? ? ? ? ? ? ? ? ? ? ? ? ' 逆時針120度
? ? ? ?CDGen_FowardDraw 0.4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.4個單位
? ? ? ?CDGen_SetDirection 60 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針60度
? ? ? ?CDGen_FowardDraw 0.6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.6個單位
? ? ? ?CDGen_SetDirection 60 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針60度
? ? ? ?CDGen_FowardDraw 1.6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.6個單位
? ? ? ?CDGen_SetDirection -135 ? ? ? ? ? ? ? ? ? ? ? ? ? ' 逆時針135度
? ? ? ?CDGen_FowardDraw 1.0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.0個單位
? ?Case "3"
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度(相對于垂直線)
? ? ? ?CDGen_FowardDraw 0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ? ? ?CDGen_SetDirection 135 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針135度
? ? ? ?CDGen_FowardDraw 0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ? ? ?CDGen_SetDirection -120 ? ? ? ? ? ? ? ? ? ? ? ? ? ' 逆時針120度
? ? ? ?CDGen_FowardDraw 0.6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.6個單位
? ? ? ?CDGen_SetDirection 80 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針80度
? ? ? ?CDGen_FowardDraw 0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.5個單位
? ? ? ?CDGen_SetDirection 60 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針60度
? ? ? ?CDGen_FowardDraw 0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.5個單位
? ? ? ?CDGen_SetDirection 60 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針60度
? ? ? ?CDGen_FowardDraw 0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.5個單位
? ? ? ?CDGen_MoveToMiddle 0, 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ' 移動畫筆的位置到第1筆(0開始)的2%處
? ? ? ?CDGen_SetDirection -125 ? ? ? ? ? ? ? ? ? ? ? ? ? ' 逆時針125度
? ? ? ?CDGen_FowardDraw 0.1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.1個單位
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度
? ? ? ?CDGen_FowardDraw 0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ?Case "4"
? ? ? ?CDGen_SetDirection 20 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針20度(相對于垂直線)
? ? ? ?CDGen_FowardDraw 1.2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ? ? ?CDGen_SetDirection -110 ? ? ? ? ? ? ? ? ? ? ? ? ? ' 逆時針110度
? ? ? ?CDGen_FowardDraw 1.2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.2個單位
? ? ? ?CDGen_MoveToMiddle 1, 60 ? ? ? ? ? ? ? ? ? ? ? ? ?' 移動畫筆的位置到第1筆(0開始)的60%處
? ? ? ?CDGen_SetDirection 90 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針90度
? ? ? ?CDGen_FowardDraw 0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.7個單位
? ? ? ?CDGen_MoveCursor 2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 移動畫筆到第2筆(0開始)的開始處
? ? ? ?CDGen_FowardDraw -1.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制1.5個單位
? ?Case "5"
? ? ? ?CDGen_SetDirection 90 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針90度(相對于垂直線)
? ? ? ?CDGen_FowardDraw 1.0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.0個單位
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度
? ? ? ?CDGen_FowardDraw 0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度
? ? ? ?CDGen_FowardDraw 0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ? ? ?CDGen_SetDirection 30 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針30度
? ? ? ?CDGen_FowardDraw 0.4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.4個單位
? ? ? ?CDGen_SetDirection 60 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針60度
? ? ? ?CDGen_FowardDraw 0.4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.4個單位
? ? ? ?CDGen_SetDirection 30 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針30度
? ? ? ?CDGen_FowardDraw 0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.5個單位
? ? ? ?CDGen_SetDirection 60 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針60度
? ? ? ?CDGen_FowardDraw 0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ? ? ?CDGen_MoveCursor 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 移動畫筆到第1筆(0開始)的開始處
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度
? ? ? ?CDGen_FowardDraw 0.1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.1個單位
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度
? ? ? ?CDGen_FowardDraw 1.0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.0個單位
? ?Case "6"
? ? ? ?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 120 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw -0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.7個單位
? ? ? ?CDGen_SetDirection 120 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw 0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.7個單位
? ? ? ?CDGen_SetDirection 120 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw -0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.7個單位
? ? ? ?CDGen_SetDirection 120 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw 0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.5個單位
? ? ? ?CDGen_CloseToMiddle 2, 50 ? ? ? ? ? ? ? ? ? ? ? ? ' 將當前畫筆位置與第2筆(0開始)的50%處封閉
? ?Case "7"
? ? ? ?CDGen_SetDirection 180 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針180度(相對于垂直線)
? ? ? ?CDGen_FowardDraw 0.3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.3個單位
? ? ? ?CDGen_SetDirection 90 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針90度
? ? ? ?CDGen_FowardDraw 0.9 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.9個單位
? ? ? ?CDGen_SetDirection 120 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw 1.3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.3個單位
? ? ? ?CDGen_MoveToMiddle 1, 2 ? ? ? ? ? ? ? ? ? ? ? ? ?' 移動畫筆的位置到第2筆(0開始)的2%處
? ? ? ?CDGen_SetDirection -30 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針30度
? ? ? ?CDGen_FowardDraw 0.1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.1個單位
? ? ? ?CDGen_SetDirection -90 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針90度
? ? ? ?CDGen_FowardDraw 0.9 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.9個單位
? ?Case "8"
? ? ? ?CDGen_SetDirection -60 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針60度(相對于垂直線)
? ? ? ?CDGen_FowardDraw -0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.8個單位
? ? ? ?CDGen_SetDirection -60 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針60度
? ? ? ?CDGen_FowardDraw -0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.8個單位
? ? ? ?CDGen_SetDirection 120 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw 0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ? ? ?CDGen_SetDirection 110 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針110度
? ? ? ?CDGen_FowardDraw -1.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制1.5個單位
? ? ? ?CDGen_SetDirection -110 ? ? ? ? ? ? ? ? ? ? ? ? ? ' 逆時針110度
? ? ? ?CDGen_FowardDraw 0.9 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.9個單位
? ? ? ?CDGen_SetDirection 60 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針60度
? ? ? ?CDGen_FowardDraw 0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ? ? ?CDGen_SetDirection 60 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針60度
? ? ? ?CDGen_FowardDraw 0.8 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.8個單位
? ? ? ?CDGen_SetDirection 60 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針60度
? ? ? ?CDGen_FowardDraw 0.9 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.9個單位
? ? ? ?CDGen_SetDirection 70 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 順時針70度
? ? ? ?CDGen_FowardDraw 1.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.5個單位
? ? ? ?CDGen_Close 0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 封閉當前筆與第0筆(0開始)
? ?Case "9"
? ? ? ?CDGen_SetDirection 120 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針60度(相對于垂直線)
? ? ? ?CDGen_FowardDraw -0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.7個單位
? ? ? ?CDGen_SetDirection -60 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 逆時針60度
? ? ? ?CDGen_FowardDraw -0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.7個單位
? ? ? ?CDGen_SetDirection -60 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw -1.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制1.5個單位
? ? ? ?CDGen_SetDirection -60 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw -0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.7個單位
? ? ? ?CDGen_SetDirection -60 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw -0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.7個單位
? ? ? ?CDGen_SetDirection 120 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw 0.7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ' 反方向繪制0.7個單位
? ? ? ?CDGen_SetDirection -60 ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 順時針120度
? ? ? ?CDGen_FowardDraw 0.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?' 繪制0.5個單位
? ? ? ?CDGen_CloseToMiddle 2, 50 ? ? ? ? ? ? ? ? ? ? ? ? ' 將當前畫筆位置與第2筆(0開始)的50%處封閉
? ?End Select
? ?CDGen_Flush X0, Y0
End Sub
Sub CDGen_Blur()
? ?' 對產(chǎn)生的位圖進行柔化處理
? ?Dim i, j
? ?For j = 1 To nPixelHeight - 2
? ? ? ?For i = 1 To nCharCount * nPixelWidth - 2
? ? ? ? ? ?If Buf(j, i) = 0 Then
? ? ? ? ? ? ? ?If ((Buf(j, i - 1) Or Buf(j + 1, i)) And 1) <> 0 Then
? ? ? ? ? ? ? ? ? ?' 如果當前點是空白點,且上下左右四個點中有一個點是有色點,則該點做柔化處理
? ? ? ? ? ? ? ? ? ?Buf(j, i) = 2
? ? ? ? ? ? ? ?End If
? ? ? ? ? ?End If
? ? ? ?Next
? ?Next
End Sub
Sub CDGen_NoisyDot()
? ?' 對產(chǎn)生的位圖進行噪點處理
? ?Dim i, j, NoisyDot, CurDot
? ?For j = 0 To nPixelHeight - 1
? ? ? ?For i = 0 To nCharCount * nPixelWidth - 1
? ? ? ? ? ?If Buf(j, i) <> 0 Then
? ? ? ? ? ? ? ?NoisyDot = Int(Rnd * Rnd * nMaxSaturation)
? ? ? ? ? ? ? ?Select Case nColorNoisyDotOdds
? ? ? ? ? ? ? ?Case 0
? ? ? ? ? ? ? ? ? ?CurDot = nMaxSaturation
? ? ? ? ? ? ? ?Case 1
? ? ? ? ? ? ? ? ? ?CurDot = 0
? ? ? ? ? ? ? ?Case Else
? ? ? ? ? ? ? ? ? ?CurDot = NoisyDot
? ? ? ? ? ? ? ?End Select
? ? ? ? ? ? ? ?If Rnd < nColorNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = nMaxSaturation
? ? ? ? ? ?Else
? ? ? ? ? ? ? ?NoisyDot = Int(Rnd * nMaxSaturation)
? ? ? ? ? ? ? ?Select Case nBlankNoisyDotOdds
? ? ? ? ? ? ? ?Case 0
? ? ? ? ? ? ? ? ? ?CurDot = 0
? ? ? ? ? ? ? ?Case 1
? ? ? ? ? ? ? ? ? ?CurDot = nMaxSaturation
? ? ? ? ? ? ? ?Case Else
? ? ? ? ? ? ? ? ? ?CurDot = NoisyDot
? ? ? ? ? ? ? ?End Select
? ? ? ? ? ? ? ?If Rnd < nBlankNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = 0
? ? ? ? ? ?End If
? ? ? ?Next
? ?Next
End Sub
Sub CDGen()
? ?' 生成位圖陣列
? ?Dim i, Ch
? ?DigtalStr = ""
? ?CDGen_Clear
? ?Const d="123456789"
? ?Const o="+-*"
? ?For i = 0 To nCharCount-1
? ? ? ?If i mod 2 = 0 Then
? ? ? ? ? ?Ch = Mid(d, Int(Rnd * Len(d)) + 1, 1)
? ? ? ? ? ?DigtalStr = DigtalStr + Ch
? ? ? ? ? ?CDGen_Char Ch, i * nPixelWidth, 0
? ? ? ?ElseIf ( nCharCount mod 2 = 0 ) AND ( i=nCharCount-1 ) Then
? ? ? ? ? ?Ch = "="
? ? ? ? ? ?DigtalStr = DigtalStr + Ch
? ? ? ? ? ?CDGen_Char Ch, i * nPixelWidth, 0
? ? ? ?Else
? ? ? ? ? ?Ch = Mid(o, Int(Rnd * Len(o)) + 1, 1)
? ? ? ? ? ?DigtalStr = DigtalStr + Ch
? ? ? ? ? ?CDGen_Char Ch, i * nPixelWidth, 0
? ? ? ?End If
? ?Next
? ?CDGen_Blur
? ?CDGen_NoisyDot
End Sub
Function HSBToRGB(vH, vS, vB)
? ?' 將顏色值由HSB轉(zhuǎn)換為RGB
? ?Dim aRGB(3), RGB1st, RGB2nd, RGB3rd
? ?Dim nH, nS, nB
? ?Dim lH, nF, nP, nQ, nT
? ?vH = (vH Mod 360)
? ?If vS > 100 Then
? ? ? ?vS = 100
? ?ElseIf vS < 0 Then
? ? ? ?vS = 0
? ?End If
? ?If vB > 100 Then
? ? ? ?vB = 100
? ?ElseIf vB < 0 Then
? ? ? ?vB = 0
? ?End If
? ?If vS > 0 Then
? ? ? ?nH = vH / 60
? ? ? ?nS = vS / 100
? ? ? ?nB = vB / 100
? ? ? ?lH = Int(nH)
? ? ? ?nF = nH - lH
? ? ? ?nP = nB * (1 - nS)
? ? ? ?nQ = nB * (1 - nS * nF)
? ? ? ?nT = nB * (1 - nS * (1 - nF))
? ? ? ?Select Case lH
? ? ? ?Case 0
? ? ? ? ? ?aRGB(0) = nB * 255
? ? ? ? ? ?aRGB(1) = nT * 255
? ? ? ? ? ?aRGB(2) = nP * 255
? ? ? ?Case 1
? ? ? ? ? ?aRGB(0) = nQ * 255
? ? ? ? ? ?aRGB(1) = nB * 255
? ? ? ? ? ?aRGB(2) = nP * 255
? ? ? ?Case 2
? ? ? ? ? ?aRGB(0) = nP * 255
? ? ? ? ? ?aRGB(1) = nB * 255
? ? ? ? ? ?aRGB(2) = nT * 255
? ? ? ?Case 3
? ? ? ? ? ?aRGB(0) = nP * 255
? ? ? ? ? ?aRGB(1) = nQ * 255
? ? ? ? ? ?aRGB(2) = nB * 255
? ? ? ?Case 4
? ? ? ? ? ?aRGB(0) = nT * 255
? ? ? ? ? ?aRGB(1) = nP * 255
? ? ? ? ? ?aRGB(2) = nB * 255
? ? ? ?Case 5
? ? ? ? ? ?aRGB(0) = nB * 255
? ? ? ? ? ?aRGB(1) = nP * 255
? ? ? ? ? ?aRGB(2) = nQ * 255
? ? ? ?End Select
? ?Else
? ? ? ?aRGB(0) = (vB * 255) / 100
? ? ? ?aRGB(1) = aRGB(0)
? ? ? ?aRGB(2) = aRGB(0)
? ?End If
? ?HSBToRGB = ChrB(Round(aRGB(2), 0)) & ChrB(Round(aRGB(1), 0)) & ChrB(Round(aRGB(0), 0))
End Function
Sub CreatValidCode(pSN)
? ?Dim i, j, CurColorHue
? ?' 禁止緩存
? ?Response.Expires = -9999
? ?Response.AddHeader "pragma", "no-cache"
? ?Response.AddHeader "cache-ctrol", "no-cache"
? ?Response.ContentType = "image/bmp"
? ?Call CDGen
? ?Session(pSN) = Eval(Replace(DigtalStr,"=","")) & "" '記錄入Session
? ?Dim PicWidth, PicHeight, FileSize, PicDataSize
? ?PicWidth = nCharCount * nPixelWidth
? ?PicHeight = nPixelHeight
? ?PicDataSize = PicWidth * PicHeight * 3
? ?FileSize = PicDataSize + 54
? ?' 輸出BMP文件信息頭
? ?Response.BinaryWrite ChrB(66) & ChrB(77) & _
? ? ? ?ChrB(FileSize Mod 256) & ChrB((FileSize / 256) Mod 256) & ChrB((FileSize / 256 / 256) Mod 256) & ChrB(FileSize / 256 / 256 / 256) & _
? ? ? ?ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
? ? ? ?ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0)
? ?' 輸出BMP位圖信息頭
? ?Response.BinaryWrite ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & _
? ? ? ?ChrB(PicWidth Mod 256) & ChrB((PicWidth / 256) Mod 256) & ChrB((PicWidth / 256 / 256) Mod 256) & ChrB(PicWidth / 256 / 256 / 256) & _
? ? ? ?ChrB(PicHeight Mod 256) & ChrB((PicHeight / 256) Mod 256) & ChrB((PicHeight / 256 / 256) Mod 256) & ChrB(PicHeight / 256 / 256 / 256) & _
? ? ? ?ChrB(1) & ChrB(0) & _
? ? ? ?ChrB(24) & ChrB(0) & _
? ? ? ?ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
? ? ? ?ChrB(PicDataSize Mod 256) & ChrB((PicDataSize / 256) Mod 256) & ChrB((PicDataSize / 256 / 256) Mod 256) & ChrB(PicDataSize / 256 / 256 / 256) & _
? ? ? ?ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & _
? ? ? ?ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & _
? ? ? ?ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
? ? ? ?ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)
? ?' 逐點輸出位圖陣列
? ?If nColorHue = -1 Then
? ? ? ?CurColorHue = Int(Rnd * 360)
? ?ElseIf nColorHue = -2 Then
? ? ? ?CurColorHue = 0
? ?Else
? ? ? ?CurColorHue = nColorHue
? ?End If
? ?For j = 0 To nPixelHeight - 1
? ? ? ?For i = 0 To Len(DigtalStr) * nPixelWidth - 1
? ? ? ? ? ?If nColorHue = -2 Then
? ? ? ? ? ? ? ?Response.BinaryWrite HSBToRGB(CurColorHue, 0, 100 - Buf(nPixelHeight - 1 - j, i))
? ? ? ? ? ?Else
? ? ? ? ? ? ? ?Response.BinaryWrite HSBToRGB(CurColorHue, Buf(nPixelHeight - 1 - j, i), 100)
? ? ? ? ? ?End If
? ? ? ?Next
? ?Next
End Sub
%>
總結(jié)
以上是生活随笔為你收集整理的将动网论坛验证码修改为算术运算提问的验证码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站建设的基本流程及服务端开发简介
- 下一篇: 最小绝对偏差(LAD)