?? e_getcode.asp
字號:
<%
Const nMaxSaturation = 100 ' 最大色彩飽和度
Const nBlankNoisyDotOdds = 0.2 ' 空白處噪點(diǎn)率
Const nColorNoisyDotOdds = 0.1 '有色處噪點(diǎn)率
Const nCharCount = 4 ' 產(chǎn)生的字符個數(shù)
Const nPixelWidth = 25 ' 單個字符位圖的寬度
Const nPixelHeight = 25 ' 單個字符位圖的高度
Const nColorHue = -1 ' 顯示驗證碼的色調(diào)(-1表示隨機(jī)色調(diào), -2表示灰度色調(diào))'220
Const nAngleRandom = 10 ' 角度隨機(jī)量
Const nLengthRandom = 30 ' 長度隨機(jī)量(百分比)
Const cCharSet = "0123456789"
' 構(gòu)成驗證碼的字符集
' 如果擴(kuò)充了下邊的字母矢量庫,則可以相應(yīng)擴(kuò)充這個字符集
Dim Buf(), DigtalStr
Dim Lines(), LineCount
Dim CursorX, CursorY, DirX, DirY
Randomize
Call CreatValidCode("GetCode")
Sub CDGen_Reset()
' 復(fù)位矢量筆和環(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)
' 在位圖陣列上畫點(diǎn)
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)
' 按當(dāng)前光筆方向繪制指定長度并移動光筆,正數(shù)表示從左向右/從上向下繪制,負(fù)數(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ù)表示相對當(dāng)前方向順時針改變方向,負(fù)數(shù)表示相對當(dāng)前方向逆時針改變方向
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)
' 將畫筆光標(biāo)移動到指定動作的中間點(diǎn)上,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)
' 將畫筆光標(biāo)移動到指定動作的起始點(diǎn)上
CursorX = Lines(0, nActionIndex)
CursorY = Lines(1, nActionIndex)
End Sub
Sub CDGen_Close(nActionIndex)
' 將當(dāng)前光筆位置與指定動作的起始點(diǎn)閉合并移動光筆
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)
' 將當(dāng)前光筆位置與指定動作的中間點(diǎn)閉合并移動光筆,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)
' 按照當(dāng)前的畫筆動作序列繪制位圖點(diǎn)陣
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)
' 在指定坐標(biāo)處生成指定字符的位圖陣列
CDGen_Reset
Select Case cChar
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 ' 封閉當(dāng)前筆與第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個單位
Case "4"
CDGen_SetDirection 20 ' 順時針20度(相對于垂直線)
CDGen_FowardDraw 0.8 ' 繪制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個單位
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個單位
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -