Session("GetCode") 服务器端验证客户端输入的验证码
<img src="验证码.asp">
验证码.asp
<%
Option Explicit
Response.Buffer = true
Class ValidCode
Private PNoise
Private PBgColor
Private PLength
Private charSet
Private charSetCount
'噪点
Public Property Let Noise(ByVal Value)
If IsNumeric(Value) Then
PNoise = CInt(Value) Mod 100
End If
End Property
Public Property Get Noise()
Noise = PNoise
End Property
'背景颜色
Public Property Let BgColor(ByVal Value)
PBgColor = Value
End Property
Public Property Get BgColor()
BgColor = PBgColor
End Property
'验证码长度
Public Property Let Length(ByVal Value)
PLength = Value
If PLength < 2 Then PLength = 2
End Property
Public Property Get Length()
Length = PLength
End Property
Private Sub Class_Initialize()
'charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
charSet = "0123456789"
charSetCount = Len(charSet)
Noise = 6
Length = 4
BgColor = ChrB(250) & ChrB(250) & ChrB(240)
End Sub
Private Sub Class_Terminate()
End Sub
Public Sub Generate(sessionName)
' 字符数据
Dim numberSet(35)
numberSet(0) = "1110000111110111101111011110111101001011110100101111010010111101001011110111101111011110111110000111"
numberSet(1) = "1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111"
numberSet(2) = "1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011"
numberSet(3) = "1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111"
numberSet(4) = "1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011"
numberSet(5) = "1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111"
numberSet(6) = "1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111"
numberSet(7) = "1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111"
numberSet(8) = "1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111"
numberSet(9) = "1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111"
numberSet(10) = "1111111111111100111111110011111110110111111011011111000000111101111011110111101111011110111000110001"
numberSet(11) = "0000001111100111011110011110111001111011100000011110011110111001111101100111101110011101110000001111"
numberSet(12) = "1111000010111011110011011111101011111110101111111110111111111011111110110111111011101111001111000010"
numberSet(13) = "0000001111100111011110011110111001111101100111110110011111011001111101100111101110011101110000001111"
numberSet(14) = "0000000011100111110110011111111001111011100000001110011110111001111111100111111110011111100000000001"
numberSet(15) = "0000000011100111110110011111111001111011100000001110011110111001111111100111111110011111110001111111"
numberSet(16) = "1111000010111011110011011111101011111110101111111110110000001011111100110111110011101111001111000010"
numberSet(17) = "0000110000100111100110011110011001111001100000000110011110011001111001100111100110011110010000110000"
numberSet(18) = "1100000011111100111111110011111111001111111100111111110011111111001111111100111111110011111100000011"
numberSet(19) = "1100000011111100111111110011111111001111111100111111110011111111001111110100111110010011111100011111"
numberSet(20) = "1000010001110011101111001101111100101111110000111111001101111100110111110011101111001110111000010001"
numberSet(21) = "1000011111110011111111001111111100111111110011111111001111111100111111110011111111001110111000000011"
numberSet(22) = "0000110000100111100110011100011010110001101011000110101100011010101001101100100110110110010001010000"
numberSet(23) = "0001111000100011110110001111011000011101101000110110110001011011100101101110000110111100010001111001"
numberSet(24) = "1111001111110011001110111111010011111100001111110000111111000011111100101111110111001100111111001111"
numberSet(25) = "0000001111100111011110011100111001110011100111001110011101111000001111100111111110011111110000111111"
numberSet(26) = "1110000111110011001110011110011001111001100111100110011110011001111001100110000111001100111110000001"
numberSet(27) = "1000000011100111100110011110011001111001100111100110000000111001111001100111100110011110011001111101"
numberSet(28) = "1110000011110011100111001110011100111111111000111111110001111111110011110011100111001110011110000011"
numberSet(29) = "1000000001111100111111110011111111001111111100111111110011111111001111111100111111110011111110000111"
numberSet(30) = "1001111001100111100110011110011001111001100111100110011110011001111001100111100111001100111110000111"
numberSet(31) = "1001111001100111100111001100111100110011110011001111101101111110000111111000011111110011111111001111"
numberSet(32) = "0111111110011101111001110111101010101101101010110110101011011010110101110111001111011110111101111011"
numberSet(33) = "1001111001100111100111001100111110000111111000011111100001111110000111110011001110011110011001111001"
numberSet(34) = "0000110000100111100111001100111110000111111000011111110011111111001111111100111111110011111110000111"
numberSet(35) = "1000000000111111110011111110011110110011111100011111110011111110010111110011111110011111111000000000"
' 颜色数据
Randomize
Dim i, ii, iii
Dim colorSet : colorSet = Split(Space(Length - 1), " ")
For i = 0 To Length - 1
colorSet(i) = RandomColor()
Next
' 随机字符
Dim codes, code : code = Split(Space(Length - 1), " ")
For i = 0 To Length - 1
code(i) = Int(Rnd * charSetCount)
codes = codes & Mid(charSet, code(i) + 1, 1)
Next
Session(sessionName) = UCase(codes) '记录Session
With Response
.Expires = -1
.ExpiresAbsolute = Now - 1
.AddHeader "Pragma","no-cache"
.AddHeader "cache-ctrol","no-cache"
.CacheControl = "no-cache"
.ContentType = "Image/BMP"
'dword对齐处理 by V37
Dim byteCount,BytePatch
byteCount=((Length*10*3) mod 4)
If byteCount>0 Then
byteCount= 4 - ((Length*10*3) Mod 4)
For i=1 To byteCount : BytePatch = BytePatch & chrB(00) : Next
End If
'处理文件尺寸和图像数据信息
Dim datalength, filelength, fsize, datasize, schar, scharlen
datasize = (Length*10*3+byteCount) * 10 + 2
fsize = datasize+54
schar = CStr(Hex(datasize))
schar = String(8 - Len(schar), "0") & schar
For i=7 To 1 Step -2
datalength = datalength & ChrB("&H" & Mid(schar,i,2)) '文件尺寸
Next
schar = CStr(Hex(fsize))
schar = String(8 - Len(schar), "0") & schar
For i=7 To 1 Step -2
filelength = filelength & ChrB("&H" & Mid(schar,i,2)) '图像数据尺寸
Next
'图像文件头
.BinaryWrite _
ChrB(66) & ChrB(77) & _
filelength & _
ChrB(0) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(10 * Length) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(10) & ChrB(0) & _
ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)
' 图像信息头
.BinaryWrite _
ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
datalength & _
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)
For i = 9 To 0 Step -1 '行
For ii = 0 To Length - 1 ' 字
For iii = 1 To 10 ' 列
If Rnd * 99 + 1 < Noise Then ' 杂点
.BinaryWrite RandomColor()
Else
If Mid(numberSet(code(ii)), i * 10 + iii, 1) = "1" Then
.BinaryWrite BgColor
Else
.BinaryWrite colorSet(ii)
End If
End If
Next
Next
If byteCount>0 Then .BinaryWrite BytePatch
Next
End With
End Sub
Private Function RandomColor()
RandomColor = ChrB(Rnd * 150 + 50) & ChrB(Rnd * 200 + 20) & ChrB(Rnd * 150 + 50)
End Function
End Class
Dim VCode : Set VCode = New ValidCode
VCode.BgColor = ChrB(255) & ChrB(255) & ChrB(255)
VCode.Noise = 5 + Rnd(3)
VCode.Length = 4
VCode.Generate("GetCode")
Set VCode = Nothing
%>
演示 下载