用户名 UID 密 码 记住 注册会员| 找回密码
社区服务 社区应用 统计排行 银行 勋章 道具
最新活动(5)|会员互动|教程学习|互帮互助|作品交流|图图市场|图片素材|素材下载|贴图版块|休闲娱乐|交易大厅|站务大厅
[素材] ASP图片验证码类
UID:12090514
越兔

ASP图片验证码类

本贴由: 中华图网 会员: 越兔 发表于: 2008-09-12 11:24 阅读: 3434 次   [收藏本贴到:QQ书签 | 百度收藏夹]
转个我佛山人的图片验证码类
以下内容保存为ASP即可。
运行时调用地址指向这个ASP文件即可。
即img.src = 这个asp的地址
复制代码
  1. <%
  2. 'ValidCode 图片验证码类
  3. '我佛山人@2005.8.23
  4. Option Explicit
  5. Response.Buffer = true
  6. Class ValidCode
  7.     Private PNoise
  8.     Private PBgColor
  9.     Private PLength
  10.     Private charSet
  11.     Private charSetCount
  12.     '噪点
  13.     Public Property Let Noise(ByVal Value)
  14.         If IsNumeric(Value) Then
  15.             PNoise = CInt(Value) Mod 100
  16.         End If
  17.     End Property
  18.     Public Property Get Noise()
  19.         Noise = PNoise
  20.     End Property
  21.     '背景颜色
  22.     Public Property Let BgColor(ByVal Value)
  23.         PBgColor = Value
  24.     End Property
  25.     Public Property Get BgColor()
  26.         BgColor = PBgColor
  27.     End Property
  28.     '验证码长度
  29.     Public Property Let Length(ByVal Value)
  30.         PLength = Value
  31.         If PLength < 2 Then PLength = 2
  32.     End Property
  33.     Public Property Get Length()
  34.         Length = PLength
  35.     End Property
  36.     Private Sub Class_Initialize()
  37.         charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  38.         charSetCount = Len(charSet)
  39.         Noise = 6
  40.         Length = 4
  41.         BgColor = ChrB(250) & ChrB(250) & ChrB(240)
  42.     End Sub    
  43.     Private Sub Class_Terminate()
  44.     End Sub
  45.     Public Sub Generate(sessionName)
  46.         ' 字符数据
  47.         Dim numberSet(35)
  48.         numberSet(0) = "1110000111110111101111011110111101001011110100101111010010111101001011110111101111011110111110000111"
  49.         numberSet(1) = "1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111"
  50.         numberSet(2) = "1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011"
  51.         numberSet(3) = "1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111"
  52.         numberSet(4) = "1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011"
  53.         numberSet(5) = "1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111"
  54.         numberSet(6) = "1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111"
  55.         numberSet(7) = "1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111"
  56.         numberSet(8) = "1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111"
  57.         numberSet(9) = "1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111"
  58.         numberSet(10) = "1111111111111100111111110011111110110111111011011111000000111101111011110111101111011110111000110001"
  59.         numberSet(11) = "0000001111100111011110011110111001111011100000011110011110111001111101100111101110011101110000001111"
  60.         numberSet(12) = "1111000010111011110011011111101011111110101111111110111111111011111110110111111011101111001111000010"
  61.         numberSet(13) = "0000001111100111011110011110111001111101100111110110011111011001111101100111101110011101110000001111"
  62.         numberSet(14) = "0000000011100111110110011111111001111011100000001110011110111001111111100111111110011111100000000001"
  63.         numberSet(15) = "0000000011100111110110011111111001111011100000001110011110111001111111100111111110011111110001111111"
  64.         numberSet(16) = "1111000010111011110011011111101011111110101111111110110000001011111100110111110011101111001111000010"
  65.         numberSet(17) = "0000110000100111100110011110011001111001100000000110011110011001111001100111100110011110010000110000"
  66.         numberSet(18) = "1100000011111100111111110011111111001111111100111111110011111111001111111100111111110011111100000011"
  67.         numberSet(19) = "1100000011111100111111110011111111001111111100111111110011111111001111110100111110010011111100011111"
  68.         numberSet(20) = "1000010001110011101111001101111100101111110000111111001101111100110111110011101111001110111000010001"
  69.         numberSet(21) = "1000011111110011111111001111111100111111110011111111001111111100111111110011111111001110111000000011"
  70.         numberSet(22) = "0000110000100111100110011100011010110001101011000110101100011010101001101100100110110110010001010000"
  71.         numberSet(23) = "0001111000100011110110001111011000011101101000110110110001011011100101101110000110111100010001111001"
  72.         numberSet(24) = "1111001111110011001110111111010011111100001111110000111111000011111100101111110111001100111111001111"
  73.         numberSet(25) = "0000001111100111011110011100111001110011100111001110011101111000001111100111111110011111110000111111"
  74.         numberSet(26) = "1110000111110011001110011110011001111001100111100110011110011001111001100110000111001100111110000001"
  75.         numberSet(27) = "1000000011100111100110011110011001111001100111100110000000111001111001100111100110011110011001111101"
  76.         numberSet(28) = "1110000011110011100111001110011100111111111000111111110001111111110011110011100111001110011110000011"
  77.         numberSet(29) = "1000000001111100111111110011111111001111111100111111110011111111001111111100111111110011111110000111"
  78.         numberSet(30) = "1001111001100111100110011110011001111001100111100110011110011001111001100111100111001100111110000111"
  79.         numberSet(31) = "1001111001100111100111001100111100110011110011001111101101111110000111111000011111110011111111001111"
  80.         numberSet(32) = "0111111110011101111001110111101010101101101010110110101011011010110101110111001111011110111101111011"
  81.         numberSet(33) = "1001111001100111100111001100111110000111111000011111100001111110000111110011001110011110011001111001"
  82.         numberSet(34) = "0000110000100111100111001100111110000111111000011111110011111111001111111100111111110011111110000111"
  83.         numberSet(35) = "1000000000111111110011111110011110110011111100011111110011111110010111110011111110011111111000000000"
  84.         ' 颜色数据
  85.         Randomize
  86.         Dim i, ii, iii
  87.         Dim colorSet : colorSet = Split(Space(Length - 1), " ")
  88.         For i = 0 To Length - 1
  89.             colorSet(i) = RandomColor()
  90.         Next
  91.         
  92.         ' 随机字符    
  93.         Dim codes, code : code = Split(Space(Length - 1), " ")
  94.         For i = 0 To Length - 1
  95.             code(i) = Int(Rnd * charSetCount)
  96.             codes = codes & Mid(charSet, code(i) + 1, 1)
  97.         Next
  98.         Session(sessionName) = UCase(codes)  '记录Session
  99.         With Response
  100.             .Expires = -1
  101.             .ExpiresAbsolute = Now - 1
  102.             .AddHeader "Pragma","no-cache"
  103.             .AddHeader "cache-ctrol","no-cache"
  104.             .CacheControl = "no-cache"
  105.             .ContentType = "Image/BMP"
  106.             'dword对齐处理 by V37
  107.             Dim byteCount,BytePatch
  108.             byteCount=((Length*10*3) mod 4)
  109.             If byteCount>0 Then
  110.                 byteCount= 4 - ((Length*10*3) Mod 4)
  111.                 For i=1 To byteCount : BytePatch = BytePatch & chrB(00) : Next
  112.             End If
  113.             '处理文件尺寸和图像数据信息
  114.             Dim datalength, filelength, fsize, datasize, schar, scharlen
  115.                 datasize  = (Length*10*3+byteCount) * 10 + 2
  116.                 fsize  = datasize+54
  117.                 schar = CStr(Hex(datasize))
  118.                 schar = String(8 - Len(schar), "0") & schar
  119.             For i=7 To 1 Step -2
  120.                 datalength = datalength & ChrB("&H" & Mid(schar,i,2)) '文件尺寸
  121.             Next
  122.                 schar = CStr(Hex(fsize))
  123.                 schar = String(8 - Len(schar), "0") & schar
  124.             For i=7 To 1 Step -2
  125.                 filelength = filelength & ChrB("&H" & Mid(schar,i,2)) '图像数据尺寸
  126.             Next
  127.         
  128.             '图像文件头
  129.             .BinaryWrite _
  130.                 ChrB(66) & ChrB(77) & _
  131.                 filelength & _
  132.                 ChrB(0)   & ChrB(0) & _
  133.                 ChrB(0)  & ChrB(0)  & ChrB(54)  & ChrB(0) & _
  134.                 ChrB(0)  & ChrB(0)  & ChrB(40)  & ChrB(0) & _
  135.                 ChrB(0)  & ChrB(0)  & ChrB(10 * Length) & ChrB(0) & _
  136.                 ChrB(0)  & ChrB(0)  & ChrB(10)  & ChrB(0) & _
  137.                 ChrB(0)  & ChrB(0)  & ChrB(1)   & ChrB(0)
  138.             
  139.             ' 图像信息头
  140.             .BinaryWrite _
  141.                 ChrB(24) & ChrB(0) & ChrB(0)   & ChrB(0) & ChrB(0)  & ChrB(0) & _
  142.                 datalength & _
  143.                 ChrB(18)  & ChrB(11) & ChrB(0)  & ChrB(0) & _
  144.                 ChrB(18)  & ChrB(11) & ChrB(0)  & ChrB(0) & _
  145.                 ChrB(0)   & ChrB(0) & ChrB(0)  & ChrB(0) & ChrB(0) & _
  146.                 ChrB(0) & ChrB(0) & ChrB(0)
  147.             
  148.             For i = 9 To 0 Step -1  '行
  149.                 For ii = 0 To Length - 1  ' 字
  150.                     For iii = 1 To 10 ' 列
  151.                         If Rnd * 99 + 1 < Noise Then ' 杂点
  152.                             .BinaryWrite RandomColor()
  153.                         Else
  154.                             If Mid(numberSet(code(ii)), i * 10 + iii, 1) = "1" Then
  155.                                 .BinaryWrite BgColor
  156.                             Else
  157.                                 .BinaryWrite colorSet(ii)
  158.                             End If
  159.                         End If
  160.                     Next
  161.                 Next
  162.                 If byteCount>0 Then .BinaryWrite BytePatch
  163.             Next
  164.         End With
  165.     End Sub
  166.     Private Function RandomColor()
  167.         RandomColor = ChrB(Rnd * 150 + 50) & ChrB(Rnd * 200 + 20) & ChrB(Rnd * 150 + 50)
  168.     End Function
  169. End Class
  170. Dim VCode : Set VCode = New ValidCode
  171. VCode.BgColor = ChrB(255) & ChrB(255) & ChrB(255)
  172. VCode.Noise = 5 + Rnd(3)
  173. VCode.Length = 4
  174. VCode.Generate("GetCode")
  175. Set VCode = Nothing
  176. %>
ASP图片验证码类 由 越兔 发表于中华图网,未经本人许可请勿随便转载!
 楼主最新5个主题
[楼主] 越兔 发表于:2008-09-12 11:24 [快速引用]
UID:12287296
picimg
多谢楼主,昨天有人还问我这个问题呢。
该用户目前未设置个性签名故显示默认签名(20贴以上可以到控制面板设置签名)
欢迎来到中华图网——请记住我们的网址:www.cntuw.com
photoshop视频教程:http://www.cntuw.com/photoshop
论坛使用帮助:http://www.cntuw.com/topic_11144.html
制图问题求助:http://www.cntuw.com/forum_64.html
做图软件下载:http://www.cntuw.com/soft/down/index.html
做图教程大全:http://www.cntuw.com/forum_130.html
做图素材大全:http://www.cntuw.com/forum_5.html
图网QQ群列表:http://www.cntuw.com/topic_229367.html
经典txt小说下载:http://www.yourtxt.cn
[沙发] picimg 发表于:2008-09-13 16:12 [快速引用]
 中华图网 » 网页设计交流 » ASP图片验证码类 版块权限查看
描述
快速回复
验证问题:
本网站叫什么名字?(请输入中华图网) 正确答案:中华图网
按"Ctrl+Enter"直接提交
上一个 下一个