asp图片验证码

时间:2009-03-12    点击:2005   

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
%>

演示  下载

div层中文字自动换行
meta的用法
禁用页面缓存
asp判断远程文件是否存在
asp批量修改数据
> 返回     
地址:上海市普陀区胶州路941号长久商务中心 电话: QQ:
© Copyright 2012 上海网络 All Rights Reserved