ASP生成BMP驗證碼圖片

<%@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()
%>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章