首 页 | 模 板 | 学 院 | 源 码 | 书 籍 | 壁 纸 | 字 体 | JS脚本 | FLASH源码 | 软 件 | 矢 量 | 服务器软件 | 素 材 | 其 它 |
设为主页
加入收藏
联系站长
平面设计 | 网页制作 | 程序编写 | 数 据 库 | 媒体动画 | 网络冲浪 | 服务器相关 | 站长乐园 | 业界动态 |
当前在线
生成验证码图像BMP
2006-6-28 4:08:03  作者:模板天下收集整理  来源:未知 网友评论 0 条 论坛
  '**************************************************
'[生成验证码图像BMP]
'函数名:GrapCode
'作  用:生成验证码图像
'参  数:MZYGCstr  ---- 要生成的图像的字符
'参  数:Noisy     ---- 噪点率(大于0的整数)
'参  数:BkColor   ---- 图案背景色(格式:R|G|B)
'参  数:FnColor   ---- 字符颜色(格式:R|G|B)
'参  数:NoColor   ---- 噪点颜色(格式:R|G|B)
'返回值:验证码图像
'示  例:Response.Write ""
'**************************************************
Public Function GrapCode(ByVal MZYGCstr,ByVal Noisy,ByVal BkColor,ByVal FnColor,ByVal NoColor)
  If Len(Trim(MZYGCstr))>1 Then
  Dim imgsize,pimgsize
  Const cAmount = 36
  Const cCode = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  Dim ColorV(2)
  tmp=""
  tmp=Split(BkColor,"|")
  ColorV(0) =""
  For i = LBound(tmp) To UBound(tmp)
      ColorV(0) = ColorV(0) & ChrB(CInt(tmp(i)))
  Next
  tmp=""
  tmp=Split(FnColor,"|")
  ColorV(1) =""
  For i = LBound(tmp) To UBound(tmp)
      ColorV(1) = ColorV(1) & ChrB(CInt(tmp(i)))
  Next
  tmp=""
  tmp=Split(NoColor,"|")
  ColorV(2) =""
  For i = LBound(tmp) To UBound(tmp)
      ColorV(2) = ColorV(2) & ChrB(CInt(tmp(i)))
  Next
  imgsize=10*Len(MZYGCstr)*10*24/8
  pimgsize=10*Len(MZYGCstr)*10*24/8
  If Is_JS(Len(MZYGCstr)) Then
     imgsize=imgsize+74
     pimgsize=pimgsize+20
  Else
     imgsize=imgsize+54
  End If
  imgsize =Hex(imgsize)
  pimgsize=Hex(pimgsize)
  imgsize =Cstr(imgsize)
  pimgsize=Cstr(pimgsize)
  'dword对齐处理
  Dim length, byteCount,BytePatch
  length = Len(MZYGCstr)
  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
  tmp=""
  For i=1 to len(imgsize) step 2
      If (i < len(imgsize)) Then
         tmp=tmp & Mid(imgsize,i,2) & "|"
      Else
         tmp=tmp & Mid(imgsize,i,2)
      End If
  Next
  imgsize=StrReverse(tmp)
  tmp=""
  tmp=Split(imgsize,"|")
  imgsize=""
  For i = 0 To 3
      If (i <= UBound(tmp)) Then
         imgsize=imgsize & ChrB("&H"&tmp(i))
      Else
         imgsize=imgsize & ChrB(0)
      End If
  Next
  ptmp=""
  For i=1 to len(pimgsize) step 2
      If (i < len(pimgsize)) Then
         ptmp=ptmp & Mid(pimgsize,i,2) & "|"
      Else
         ptmp=ptmp & Mid(pimgsize,i,2)
      End If
  Next
  pimgsize=StrReverse(ptmp)
  ptmp=""
  ptmp=Split(pimgsize,"|")
  pimgsize=""
  For i = 0 To 3
      If (i <= UBound(ptmp)) Then
         pimgsize=pimgsize & ChrB("&H"&ptmp(i))
      Else
         pimgsize=pimgsize & ChrB(0)
      End If
  Next
  MZYGCstr=UCase(MZYGCstr)
  tmp=""
  For i = 0 To (Len(MZYGCstr)-1)
      If i<>(Len(MZYGCstr)-1) Then
         tmp =tmp & InStr(cCode,Mid(MZYGCstr,i+1,1))-1 &"|"
      Else
         tmp =tmp & InStr(cCode,Mid(MZYGCstr,i+1,1))-1
      End If
  Next
  Dim vCode
  vCode=Split(tmp,"|")
  Response.Expires = -9999
  Response.AddHeader "pragma", "no-cache"
  Response.AddHeader "cache-ctrol", "no-cache"
  Response.Buffer = TRUE
  Response.ContentType="image/bmp"
  Response.Flush
  Response.BinaryWrite ChrB(66) & ChrB(77) & imgsize & 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*Len(MZYGCstr)) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(12) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)
  Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & pimgsize & 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)
  Dim NsD(35)
  NsD(0)  = "111111111111100001111101111011110111101111010010111101001011110100101111010010111101111011110111101111100001111111111111"
  NsD(1)  = "111111111111110111111100011111111101111111110111111111011111111101111111110111111111011111111101111111000001111111111111"
  NsD(2)  = "111111111111100001111101111011110111101111111110111111110111111110111111110111111110111111110111101111000000111111111111"
  NsD(3)  = "111111111111100001111101111011110111101111111101111111001111111111011111111110111101111011110111101111100001111111111111"
  NsD(4)  = "111111111111111011111111101111111100111111101011111101101111110110111111000000111111101111111110111111110000111111111111"
  NsD(5)  = "111111111111000000111101111111110111111111010001111100111011111111101111111110111101111011110111101111100001111111111111"
  NsD(6)  = "111111111111110001111110111011110111111111011111111101000111110011101111011110111101111011110111101111100001111111111111"
  NsD(7)  = "111111111111000000111101110111110111011111111011111111101111111101111111110111111111011111111101111111110111111111111111"
  NsD(8)  = "111111111111100001111101111011110111101111011110111110000111111011011111011110111101111011110111101111100001111111111111"
  NsD(9)  = "111111111111100011111101110111110111101111011110111101110011111000101111111110111111111011110111011111100011111111111111"
  NsD(10) = "111111111111110111111111011111111010111111101011111110101111111010111111000001111101110111110111011110001000111111111111"
  NsD(11) = "111111111110000001111101111011110111101111011101111100001111110111011111011110111101111011110111101110000001111111111111"
  NsD(12) = "111111111111100000111101111011101111101110111111111011111111101111111110111111111011111011110111011111100011111111111111"
  NsD(13) = "111111111110000011111101110111110111101111011110111101111011110111101111011110111101111011110111011110000011111111111111"
  NsD(14) = "111111111110000001111101111011110110111111011011111100001111110110111111011011111101111111110111101110000001111111111111"
  NsD(15) = "111111111110000001111101111011110110111111011011111100001111110110111111011011111101111111110111111110001111111111111111"
  NsD(16) = "111111111111100001111101110111101111011110111111111011111111101111111110111000111011110111110111011111100011111111111111"
  NsD(17) = "111111111110001000111101110111110111011111011101111100000111110111011111011101111101110111110111011110001000111111111111"
  NsD(18) = "111111111111000001111111011111111101111111110111111111011111111101111111110111111111011111111101111111000001111111111111"
  NsD(19) = "111111111111100000111111101111111110111111111011111111101111111110111111111011111111101111101110111110000111111111111111"
  NsD(20) = "111111111110001000111101110111110110111111010111111100011111110101111111011011111101101111110111011110001000111111111111"
  NsD(21) = "111111111110001111111101111111110111111111011111111101111111110111111111011111111101111111110111101110000000111111111111"
  NsD(22) = "111111111110001000111100100111110010011111001001111101010111110101011111010101111101010111110101011110010100111111111111"
  NsD(23) = "111111111110001000111100110111110011011111010101111101010111110101011111011001111101100111110110011110001101111111111111"
  NsD(24) = "111111111111100011111101110111101111101110111110111011111011101111101110111110111011111011110111011111100011111111111111"
  NsD(25) = "111111111110000001111101111011110111101111011110111100000111110111111111011111111101111111110111111110001111111111111111"
  NsD(26) = "111111111111100011111101110111101111101110111110111011111011101111101110111110111010011011110110011111100010111111111111"
  NsD(27) = "111111111110000011111101110111110111011111011101111100001111110101111111011011111101101111110111011110001100111111111111"
  NsD(28) = "111111111111100000111101111011110111101111011111111110011111111110011111111110111101111011110111101111000001111111111111"
  NsD(29) = "111111111110000000111011011011111101111111110111111111011111111101111111110111111111011111111101111111100011111111111111"
  NsD(30) = "111111111110001000111101110111110111011111011101111101110111110111011111011101111101110111110111011111100011111111111111"
  NsD(31) = "111111111110001000111101110111110111011111011101111110101111111010111111101011111110101111111101111111110111111111111111"
  NsD(32) = "111111111110010100111101010111110101011111010101111101010111110010011111101011111110101111111010111111101011111111111111"
  NsD(33) = "111111111110001000111101110111111010111111101011111111011111111101111111101011111110101111110111011110001000111111111111"
  NsD(34) = "111111111110001000111101110111110111011111101011111110101111111101111111110111111111011111111101111111100011111111111111"
  NsD(35) = "111111111111000000111101110111111111011111111011111111101111111101111111110111111110111111111011101111000000111111111111"
  Dim a,b,c
  For a=11 to 0 Step -1
      For c=0 to UBound(vCode)
          For b=1 to 10
              If Rnd * 99 + 1 < Noisy Then
                 Response.BinaryWrite ColorV(2)
              Else
                 Response.BinaryWrite ColorV(Mid(NsD(CInt(vCode(c))),a*10+b,1))
              End If
          Next
      Next
      If byteCount>0 Then Response.BinaryWrite BytePatch
  Next
  End If
End Function
>> 相关文章

关于网站 | 客服中心 | 服务条款 | 友情链接 | 广告联系 | 本站历程 | 网站导航

吉ICP备05000107号