您的位置:首页 > 编程语言 > ASP

使用ASP生成任意长度彩色BMP验证码图片

2006-03-09 05:36 806 查看
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
''''''''''''''''''''''''''''''''''''''''''''''''''''''
'ASP生成BMP验证码图片
'石卓林(精彩)
'Site URL:Http://www.camxam.com
'EMail:camxam@163.com
'QQ:383193853
'MSN:camxam@163.com
'2006年3月9日 星期四
'使用方法:在需要显示的页面嵌入  <img Src="Bmp.asp" />, 在验证码检验中使用 Session(SessionName属性值) 作为验证码参考值
'属性:
' SessionName String 会话名称. 例 Object.SessionName = "Code"
' TextLength Int  字符长度. 例 Object.TextLength = 4
' BackColor String 背景颜色,多个颜色用"," 分隔. 例:Object.BackColor = "#FF0000,#00FF00,#0000FF".
' TextColor String 文字颜色,同上.
' YawpColor String 杂点颜色,同上.
' YawpCount Int  杂点比例 范围 0-100. 例 Object.YawpCount = 30
'方法: 
' SetTextInfo String 设置字库描述信息 注意在执行任何操作前必须描述和增加点阵数据. 例: Object.SetTextInfo "这是卡通字库"
' AddTextData String 增加字库点阵信息 注意在执行任何操作前必须描述和增加点阵数据. 例: Object.AddTextData "E 00000000 00000000 01111100 01000000 01000000 01111000 01000000 01000000 01000000 01111100 00000000 00000000"
' Write()    输出图片数据
'注意事项:
'1. 关于颜色字符串:
' 可以同时设置任意多种颜色 不同的颜色之间使用 "," 分隔. 程序会将预设的多种颜色随机显示
'2. 关于会话名称:
' SessionName属性设置的是 Session 变量名称.通过在其它页面中将表单数据与此 Session变量值比较,实现验证码功能.
'3. 关于字符长度:
' 字符长度必须大于 1 .最大长度没有限制. 实际上不可能设置很大 "呵呵!ASP毕竟不是画图软件."
'4. 杂点颜色杂点比例:
' 杂点比例范围 0-100. 此值越大杂点越多,0 为无杂点,100全部是杂点.
' 和背景颜色与文字颜色一样 杂点颜色也可以设置一种一上的颜色.程序会随机使用其中的颜色
' 如将杂点比例设置为 0 则 杂点颜色属性可以不设置
'5. 字库信息:
' 字库信息就是一个字符串,此信息必须设置.内容格式不要求
'6. 字库点阵:
' 程序是随机查询字库点阵内容输出BMP图片的.
' 每一条点阵.的格式必须一样.
' 每条点阵信息的长度必须一样.
' 所有点阵信息的行数必须一样.
' 所有点阵信息的每行长度必须一样.
' 点阵信息格式:
'字符 第一行点阵 第二行点阵 第三行点阵 第四行点阵 第五行点阵 第六行点阵 第七行点阵 ...... ...... ..... ...... ......
'0 00000000 00000000 00111000 01000100 01000100 01000100 01000100 01000100 01000100 00111000 00000000 00000000
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Option Explicit
Class CAMXAM_COM_RndCodeBmp
 Private TextDataLib,TextData,BmpData,BmpHead,BmpWidth,BmpHeight,BmpSize,TextDataLength,SessionString
 Public SessionName,TextLength,BackColor,TextColor,YawpColor,YawpCount
 Private Sub Class_Initialize()
 End Sub
 Private Sub Class_Terminate()
 End Sub
 Public Function SetTextInfo(TextString)
  ReDim TextDataLib(0)
   TextDataLib(0) = TextString
 End Function
 Public Function AddTextData(TextDataString)
   TextDataLength = UBound(TextDataLib) + 1
  ReDim Preserve TextDataLib(TextDataLength)
   TextDataLib(TextDataLength) = TextDataString
 End Function
 Private Function Getbinary(IntNumber)
  Dim IntBin0,IntBin1,IntBin2,IntBin0_,IntBin1_,IntBin2_
   IntBin0 = Int(IntNumber / 16777216)
   IntBin0_= IntNumber Mod 16777216
   IntBin1 = Int(IntBin0_ / 65536)
   IntBin1_= IntBin0_ Mod 65536
   IntBin2 = Int(IntBin1_ / 256)
   IntBin2_= IntBin1_ Mod 256
   Getbinary = ChrB(IntBin2_) & ChrB(IntBin2) & ChrB(IntBin1) & ChrB(IntBin0)
 End Function
 Private Function GetColorString(ColorString)
  Dim ColorArray,CALength
   ColorArray = Split(ColorString,",")
   CALength = UBound(ColorArray)
   GetColorString = ColorArray(GetRnd(0,CALength))
 End Function
 Private Function GetRnd(LowNumber,UpNumber)
  Randomize Timer
   GetRnd = Int((UpNumber - LowNumber + 1) * Rnd + LowNumber)
 End Function
 Private Function FileHeader()
  Response.Expires = 0
  Response.AddHeader "Pragma","no-cache"
  Response.AddHeader "cache-ctrol","no-cache"
  Response.ContentType = "Image/BMP"
 End Function
 Private Function SetBmpHead(BmpSize,Width,Height)
  BmpHead = ChrB(66) & ChrB(77)
  BmpHead = BmpHead & Getbinary(BmpSize+54)
  BmpHead = BmpHead & Getbinary(0)
  BmpHead = BmpHead & Getbinary(54)
  BmpHead = BmpHead & Getbinary(40)
  BmpHead = BmpHead & Getbinary(Width)
  BmpHead = BmpHead & Getbinary(Height)
  BmpHead = BmpHead & ChrB(1) & ChrB(0)
  BmpHead = BmpHead & ChrB(24) & ChrB(0)
  BmpHead = BmpHead & Getbinary(0)
  BmpHead = BmpHead & Getbinary(BmpSize)
  BmpHead = BmpHead & Getbinary(65536)
  BmpHead = BmpHead & Getbinary(65536)
  BmpHead = BmpHead & Getbinary(16777216)
  BmpHead = BmpHead & Getbinary(16777216)
 End Function
 Private Function GetRndTextData()
  ReDim TextData(TextLength-1)
  Dim IText
  For IText = 0 To TextLength-1 Step +1
   TextData(IText) = GetColorString(BackColor) & " " & GetColorString(TextColor) & " " & TextDataLib(GetRnd(1,TextDataLength))
   SessionString = SessionString & GetTextData(IText)(4)
  Next
 End Function
 Private Function GetTextData(IText)
  Dim TextArray,ArrayLength,ITextData
   TextArray = Split(TextData(IText)," ")
   ArrayLength = UBound(TextArray)
  Dim TextDataArray(5)
   TextDataArray(0) = TextArray(0)
   TextDataArray(1) = TextArray(1)
   TextDataArray(2) = Len(TextArray(3))
   TextDataArray(3) = ArrayLength - 2
   TextDataArray(4) = TextArray(2)
  For ITextData = 3 To ArrayLength Step +1
   TextDataArray(5) = TextDataArray(5) & " " & TextArray(ITextData)
  Next
   GetTextData = TextDataArray
 End Function
 Private Function GetColor(ColorString)
  GetColor = ChrB("&H" & Mid(ColorString,6,2)) & ChrB("&H" & Mid(ColorString,4,2)) & ChrB("&H" & Mid(ColorString,2,2))
 End Function
 Private Function BmpColor(ColorA,ColorB)
  Dim BmpColor_(1)
   BmpColor_(0) = GetColor(ColorA)
   BmpColor_(1) = GetColor(ColorB)
   BmpColor = BmpColor_
 End Function
 Private Function SetBmpData()
  Dim TextInfo,FontData,I,J,K
   GetRndTextData()
   TextInfo = GetTextData(0)
   BmpHeight = TextInfo(3)
   BmpWidth = TextInfo(2) * TextLength
   BmpSize = BmpHeight * BmpWidth * 3
  For I = BmpHeight To 1 St
4000
ep -1
   For J = 0 To TextLength -1 Step +1
    TextInfo = GetTextData(J)
    FontData = Split(TextInfo(5)," ")(I)
    For K = 1 To TextInfo(2) Step +1
     If GetRnd(1,99) < YawpCount Then
      BmpData = BmpData & GetColor(GetColorString(YawpColor))
     Else
      BmpData = BmpData & BmpColor(TextInfo(0),TextInfo(1))(Mid(FontData,K,1))
     End If
    Next
   Next
  Next
 End Function
 Public Function Write()
  FileHeader()
  SetBmpData()
  SetBmpHead BmpSize,BmpWidth,BmpHeight
  Response.BinaryWrite BmpHead
  Response.BinaryWrite BmpData
  Session(SessionName) = SessionString
 End Function
End Class
Dim Bmp
Set Bmp = New CAMXAM_COM_RndCodeBmp
 Bmp.SetTextInfo "8 × 12 字库 字库来源 Wh_BmpText http://vcc5.vicp.net Email: wuyingke5155@163.com Oicq:54883661" '字库信息
 Bmp.AddTextData "0 00000000 00000000 00111000 01000100 01000100 01000100 01000100 01000100 01000100 00111000 00000000 00000000"
 Bmp.AddTextData "1 00000000 00000000 00110000 01010000 00010000 00010000 00010000 00010000 00010000 01111100 00000000 00000000"
 Bmp.AddTextData "2 00000000 00000000 01111000 00000100 00000100 00001000 00010000 00100000 01000000 01111100 00000000 00000000"
 Bmp.AddTextData "3 00000000 00000000 01111000 00000100 00000100 00111000 00000100 00000100 00000100 01111000 00000000 00000000"
 Bmp.AddTextData "4 00000000 00000000 00001000 00011000 00101000 00101000 01001000 01111100 00001000 00001000 00000000 00000000"
 Bmp.AddTextData "5 00000000 00000000 01111000 01000000 01000000 01110000 00001000 00001000 00001000 01110000 00000000 00000000"
 Bmp.AddTextData "6 00000000 00000000 00111100 01000000 01000000 01011000 01100100 01000100 01000100 00111000 00000000 00000000"
 Bmp.AddTextData "7 00000000 00000000 01111100 00000100 00001000 00010000 00100000 00100000 01000000 01000000 00000000 00000000"
 Bmp.AddTextData "8 00000000 00000000 00111000 01000100 01000100 00111000 01001100 01000100 01000100 00111000 00000000 00000000"
 Bmp.AddTextData "9 00000000 00000000 00111000 01000100 01000100 01001100 00110100 00000100 00000100 01111000 00000000 00000000"
 Bmp.AddTextData "A 00000000 00000000 00010000 00101000 00101000 00101000 01000100 01111100 01000100 10000010 00000000 00000000"
 Bmp.AddTextData "B 00000000 00000000 01111000 01000100 01000100 01111000 01001000 01000100 01000100 01111000 00000000 00000000"
 Bmp.AddTextData "C 00000000 00000000 00011100 00100000 01000000 01000000 01000000 01000000 00100000 00011100 00000000 00000000"
 Bmp.AddTextData "D 00000000 00000000 01110000 01001000 01000100 01000100 01000100 01000100 01001000 01110000 00000000 00000000"
 Bmp.AddTextData "E 00000000 00000000 01111100 01000000 01000000 01111000 01000000 01000000 01000000 01111100 00000000 00000000"
 Bmp.AddTextData "F 00000000 00000000 01111100 01000000 01000000 01111000 01000000 01000000 01000000 01000000 00000000 00000000"
 Bmp.AddTextData "G 00000000 00000000 00011100 00100000 01000000 01000000 01000100 01000100 00100100 00011100 00000000 00000000"
 Bmp.AddTextData "H 00000000 00000000 01000100 01000100 01000100 01111100 01000100 01000100 01000100 01000100 00000000 00000000"
 Bmp.AddTextData "I 00000000 00000000 01111100 00010000 00010000 00010000 00010000 00010000 00010000 01111100 00000000 00000000"
 Bmp.AddTextData "J 00000000 00000000 00111000 00001000 00001000 00001000 00001000 00001000 00001000 01110000 00000000 00000000"
 Bmp.AddTextData "K 00000000 00000000 01000100 01001000 01010000 01100000 01100000 01010000 01001000 01000100 00000000 00000000"
 Bmp.AddTextData "L 00000000 00000000 01000000 01000000 01000000 01000000 01000000 01000000 01000000 01111100 00000000 00000000"
 Bmp.AddTextData "M 00000000 00000000 10000100 10000100 11001100 11001100 10110100 10110100 10000100 10000100 00000000 00000000"
 Bmp.AddTextData "N 00000000 00000000 01000100 01100100 01100100 01010100 01010100 01001100 01001100 01000100 00000000 00000000"
 Bmp.AddTextData "O 00000000 00000000 00010000 00101000 01000100 01000100 01000100 01000100 00101000 00010000 00000000 00000000"
 Bmp.AddTextData "P 00000000 00000000 01111000 01000100 01000100 01001000 01110000 01000000 01000000 01000000 00000000 00000000"
 Bmp.AddTextData "Q 00000000 00000000 00010000 00101000 01000100 01000100 01000100 01000100 00101000 00011000 00000100 00000000"
 Bmp.AddTextData "R 00000000 00000000 01111000 01000100 01000100 01000100 01111000 01001000 01000100 01000100 00000000 00000000"
 Bmp.AddTextData "S 00000000 00000000 00111100 01000000 01000000 00110000 00001000 00000100 00000100 01111000 00000000 00000000"
 Bmp.AddTextData "T 00000000 00000000 11111110 00010000 00010000 00010000 00010000 00010000 00010000 00010000 00000000 00000000"
 Bmp.AddTextData "U 00000000 00000000 01000100 01000100 01000100 01000100 01000100 01000100 01000100 00111000 00000000 00000000"
 Bmp.AddTextData "V 00000000 00000000 10000010 01000100 01000100 01000100 00101000 00101000 00101000 00010000 00000000 00000000"
 Bmp.AddTextData "W 00000000 00000000 10000010 10000010 10010010 10010010 01101100 01101100 01000100 01000100 00000000 00000000"
 Bmp.AddTextData "X 00000000 00000000 01000100 00101000 00101000 00010000 00010000 00101000 01000100 01000100 00000000 00000000"
 Bmp.AddTextData "Y 00000000 00000000 01000100 01000100 00101000 00101000 00010000 00010000 00010000 00010000 00000000 00000000"
 Bmp.AddTextData "Z 00000000 00000000 01111100 00000100 00001000 00010000 00010000 00100000 01000000 01111100 00000000 00000000"
 Bmp.SessionName = "code" '验证码用Session名称
 Bmp.TextLength = 4 '验证码长度
 Bmp.BackColor = "#FFFFFF,#EEEEEE" '背景颜色,多个颜色用"," 分隔
 Bmp.TextColor = "#FF0000,#0000FF" '文字颜色,多个颜色用"," 分
 Bmp.YawpColor = "#DDDDDD,#EEEEEE" '噪波点颜色,多个颜色使用"," 分隔
 Bmp.YawpCount = 6 '噪波点比例 0-100
 Bmp.Write()
%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息