<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
''''''''''''''''''''''''''''''''''''''''''''''''''''''
'ASP生成BMP驗證碼圖片
'石卓林(精彩)
'Site URL:Http://www.camxam.com
'EMail:[email protected]
'QQ:383193853
'MSN:[email protected]
'2006年3月9日 星期四
'使用方法:在需要顯示的頁面嵌入 , 在驗證碼檢驗中使用 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) '類型"BM"
BmpHead = BmpHead & Getbinary(BmpSize+54) '文件的大小(字節)
BmpHead = BmpHead & Getbinary(0) '保留必須爲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) '用字節數表示的位圖數據的大小。該數必須是4的倍數
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 Step -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: [email protected] 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 = 6 '驗證碼長度
Bmp.BackColor = "#FFFFFF" '背景顏色,多個顏色用"," 分隔
Bmp.TextColor = "#FF0000,#00FF00,#0000FF" '文字顏色,多個顏色用"," 分
Bmp.YawpColor = "#000000" '噪波點顏色,多個顏色使用"," 分隔
Bmp.YawpCount = 10 '噪波點比例 0-100
Bmp.Write()
%>
ASP生成BMP驗證碼圖片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.