| 
				VerifyCode(asp),gif驗(yàn)證碼生成技術(shù)					
					
					
						|  | 
							admin 2012年2月22日 14:0
								本文熱度 4335 |  
 
 
 <% '--------------------------------------
 'Fly38.com - VerifyCode Class
 ' gif 驗(yàn)證碼生成類(lèi)
 ' 原作者:NetRube
 '--------------------------------------
 Class Fly38_VerifyCode
 Public GlobalColorTable(), LocalColorTable()
 Public TransparentColorIndex, UseTransparency
 Public GIF89a
 Public Comment
 
 Private FGroundColorIndex, BGroundColorIndex
 Private Image
 Private GlobalColorTableSize, GlobalColorTableFlag, LocalColorTableSize, LocalColorTableFlag
 Private Width_, Height_
 Private LeftPosition, TopPosition
 Private Bits, ColorResolution, CodeSize
 Private PixelAspectRatio
 Private SortFlag, InterlaceFlag
 Private Seperator, GraphicControl, EndOfImage 字串9
 Private Reserved
 
 Private Font
 Private Letter(19)
 
 Private Sub Class_Initialize()
 Image = ""
 
 GIF89a = False
 
 ReDim GlobalColorTable(256)
 GlobalColorTableSize = 7
 GlobalColorTableFlag = True
 
 GlobalColorTable(2) = RGB(255, 0, 0)
 GlobalColorTable(3) = RGB(0, 255, 0)
 GlobalColorTable(4) = RGB(0, 0, 255)
 GlobalColorTable(5) = RGB(255, 255, 0)
 GlobalColorTable(6) = RGB(0, 255, 255)
 GlobalColorTable(7) = RGB(255, 0, 255)
 
 ReDim LocalColorTable(0)
 LocalColorTableSize = 0
 LocalColorTableFlag = False
 
 ColorResolution = 7
 Bits = 7
 CodeSize = 7
 
 BGroundColorIndex = 0 字串1
 FGroundColorIndex = 1
 TransparentColorIndex = 0
 UseTransparency = False
 
 LeftPosition = 0
 TopPosition = 0
 Width_ = 20
 Height_ = 20
 
 Clear
 
 PixelAspectRatio = 0
 SortFlag = False
 InterlaceFlag = False
 Seperator = Asc(",")
 GraphicControl = Asc("!")
 EndOfImage = Asc(";")
 
 Comment = ""
 
 Reserved = 0
 
 Set Font = Server.CreateObject("Scripting.Dictionary")
 
 Letter(0) = "00000000000000"
 Letter(1) = "00001111100000"
 Letter(2) = "00011111110000"
 Letter(3) = "00111000111000"
 
 字串4 Letter(4) = "00110000011100"
 Letter(5) = "01110000001100"
 Letter(6) = "01100000001110"
 Letter(7) = "01100000001110"
 Letter(8) = "11100000001110"
 Letter(9) = "11000000001110"
 Letter(10) = "11000000001110"
 Letter(11) = "11100000001110"
 Letter(12) = "11100000001100"
 Letter(13) = "11100000001100"
 Letter(14) = "01100000001100"
 Letter(15) = "01110000011100"
 Letter(15) = "00111000011000"
 Letter(16) = "00011111110000"
 Letter(17) = "00001111100000"
 Letter(18) = "00000000000000"
 Font.Add "0", Letter
 
 字串7 
 Letter(0) = "00000000000000"
 Letter(1) = "00000001110000"
 Letter(2) = "00000001110000"
 Letter(3) = "00000011100000"
 Letter(4) = "00000011000000"
 Letter(5) = "00000011000000"
 Letter(6) = "00000011000000"
 Letter(7) = "00000111000000"
 Letter(8) = "00000111000000"
 Letter(9) = "00000111000000"
 Letter(10) = "00000110000000"
 Letter(11) = "00000110000000"
 Letter(12) = "00000110000000"
 Letter(13) = "00000110000000"
 Letter(14) = "00000110000000"
 Letter(15) = "00000110000000"
 Letter(15) = "00000110000000" 字串7
 Letter(16) = "00000110000000"
 Letter(17) = "00000010000000"
 Letter(18) = "00000000000000"
 Font.Add "1", Letter
 
 Letter(0) = "00000000000000"
 Letter(1) = "00001111110000"
 Letter(2) = "00011111111000"
 Letter(3) = "00111000011100"
 Letter(4) = "01110000011100"
 Letter(5) = "01110000011000"
 Letter(6) = "01100000011000"
 Letter(7) = "00000000111000"
 Letter(8) = "00000001110000"
 Letter(9) = "00000001110000"
 Letter(10) = "00000011000000"
 Letter(11) = "00000111000000"
 Letter(12) = "00001110000000"
 
 字串1 Letter(13) = "00011000000000"
 Letter(14) = "00011000000000"
 Letter(15) = "00110000011100"
 Letter(16) = "01101111111100"
 Letter(17) = "01111111111110"
 Letter(18) = "01111100000000"
 Letter(19) = "00000000000000"
 Font.Add "2", Letter
 
 Letter(0) = "00000000000000"
 Letter(1) = "00001111111000"
 Letter(2) = "00111111111000"
 Letter(3) = "01110000111100"
 Letter(4) = "01100000011000"
 Letter(5) = "01000000111000"
 Letter(6) = "00000000111000"
 Letter(7) = "00000001110000"
 Letter(8) = "00000011000000"
 
 字串6 Letter(9) = "00000111110000"
 Letter(10) = "00000100111000"
 Letter(11) = "00000000011100"
 Letter(12) = "00000000011100"
 Letter(13) = "00000000011100"
 Letter(14) = "00000000011100"
 Letter(15) = "00000000011000"
 Letter(16) = "11100000111000"
 Letter(17) = "11111111110000"
 Letter(18) = "01111111100000"
 Letter(19) = "00000000000000"
 Font.Add "3", Letter
 
 Letter(0) = "00000000000000"
 Letter(1) = "00000000111000"
 Letter(2) = "00000001111000"
 Letter(3) = "00000011100000"
 Letter(4) = "00000111011100"
 
 字串1 Letter(5) = "00001110011100"
 Letter(6) = "00001100011000"
 Letter(7) = "00011000111000"
 Letter(8) = "00111000110000"
 Letter(9) = "01110000110000"
 Letter(10) = "01100000110000"
 Letter(11) = "01100000110000"
 Letter(12) = "11000111111110"
 Letter(13) = "11111111111100"
 Letter(14) = "11111111100000"
 Letter(15) = "11100001100000"
 Letter(16) = "00000001110000"
 Letter(17) = "00000000110000"
 Letter(18) = "00000000110000"
 Letter(19) = "00000000100000"
 Font.Add "4", Letter
 
 Letter(0) = "00000000000000" 字串7
 Letter(1) = "00001100000100"
 Letter(2) = "00011111111110"
 Letter(3) = "00011111111100"
 Letter(4) = "00011110000000"
 Letter(5) = "00011000000000"
 Letter(6) = "00111000000000"
 Letter(7) = "00111000000000"
 Letter(8) = "00111111110000"
 Letter(9) = "00111111111000"
 Letter(10) = "00000000011000"
 Letter(11) = "00000000011000"
 Letter(12) = "00000000011000"
 Letter(13) = "00000000011000"
 Letter(14) = "00000000011000"
 Letter(15) = "00000000011000"
 Letter(16) = "00000001111000"
 Letter(17) = "01111111110000" 字串6
 Letter(18) = "00111111000000"
 Letter(19) = "00000000100000"
 Font.Add "5", Letter
 
 Letter(0) = "00000000000000"
 Letter(1) = "00000011110000"
 Letter(2) = "00000111100000"
 Letter(3) = "00001110000000"
 Letter(4) = "00011100000000"
 Letter(5) = "00111000000000"
 Letter(6) = "00110000000000"
 Letter(7) = "00110000000000"
 Letter(8) = "01111111110000"
 Letter(9) = "01111111111000"
 Letter(10) = "01110000011100"
 Letter(11) = "01100000001100"
 Letter(12) = "01100000001100"
 Letter(13) = "01100000001100"
 
 字串7 Letter(14) = "01100000001100"
 Letter(15) = "01110000011100"
 Letter(16) = "00110000011100"
 Letter(17) = "00111111111000"
 Letter(18) = "00011111110000"
 Letter(19) = "00000000000000"
 Font.Add "6", Letter
 
 Letter(0) = "00000000000000"
 Letter(1) = "00100111111110"
 Letter(2) = "01111111111100"
 Letter(3) = "01111110011100"
 Letter(4) = "00000000011000"
 Letter(5) = "00000000111000"
 Letter(6) = "00000000110000"
 Letter(7) = "00000000110000"
 Letter(8) = "00000000110000"
 Letter(9) = "00000001110000" 字串9
 Letter(10) = "00000001100000"
 Letter(11) = "00000001100000"
 Letter(12) = "00000001100000"
 Letter(13) = "00000001100000"
 Letter(14) = "00000011100000"
 Letter(15) = "00000011100000"
 Letter(16) = "00000011100000"
 Letter(17) = "00000001000000"
 Letter(18) = "00000001000000"
 Letter(19) = "00000000000000"
 Font.Add "7", Letter
 
 Letter(0) = "00000000000000"
 Letter(1) = "00001111110000"
 Letter(2) = "00011111111000"
 Letter(3) = "00111000011000"
 Letter(4) = "00110000011000"
 Letter(5) = "01110000011100"
 
 字串8 Letter(6) = "01110000011000"
 Letter(7) = "00110000011000"
 Letter(8) = "00111101111000"
 Letter(9) = "00011111111000"
 Letter(10) = "00111000111100"
 Letter(11) = "01110000001100"
 Letter(12) = "01110000001100"
 Letter(13) = "01100000001110"
 Letter(14) = "01100000001100"
 Letter(15) = "01100000001100"
 Letter(16) = "01110000011100"
 Letter(17) = "00111111111100"
 Letter(18) = "00011111110000"
 Letter(19) = "00000000000000"
 Font.Add "8", Letter
 
 Letter(0) = "00000000000000"
 Letter(1) = "00011111110000"
 
 字串1 Letter(2) = "00111111111000"
 Letter(3) = "01110000111000"
 Letter(4) = "01110000011100"
 Letter(5) = "01100000001100"
 Letter(6) = "01100000001100"
 Letter(7) = "01100000001100"
 Letter(8) = "01100000001100"
 Letter(9) = "01110000011100"
 Letter(10) = "00111111111100"
 Letter(11) = "00011111111100"
 Letter(12) = "00000000011000"
 Letter(13) = "00000000011000"
 Letter(14) = "00000000111000"
 Letter(15) = "00000001110000"
 Letter(16) = "00000011100000"
 Letter(17) = "00000111000000"
 Letter(18) = "00011110000000"
 
 字串3 Letter(19) = "00000000000000"
 Font.Add "9", Letter
 End Sub
 
 Private Sub Class_Terminate()
 Font.RemoveAll
 Set Font = Nothing
 End Sub
 
 Public Property Get Width()
 Width = Width_
 End Property
 
 Public Property Get Height()
 Height = Height_
 End Property
 
 Public Property Get Version()
 Version = "NetRube VerifyCode Class 1.0 Build 20041225"
 End Property
 
 Public Property Let BGroundColor(ByVal Color)
 GlobalColorTable(0) = MakeColor(Color)
 BGroundColorIndex = 0
 End Property
 
 Public Property Let FGroundColor(ByVal Color)
 GlobalColorTable(1) = MakeColor(Color)
 FGroundColorIndex = 1
 End Property
 
 Public Property Get Pixel(ByVal PX, ByVal PY)
 
 字串2 If (PX > 0 And PX <= Width_) And (PY > 0 And PY <= Height_) Then
 Pixel = AscB(MidB(Image, (Width_ * (PY - 1)) + PX, 1))
 Else
 Pixel = 0
 End If
 End Property
 
 Public Property Let Pixel(ByVal PX, ByVal PY, PValue)
 Dim Offset
 
 PX = Int(PX)
 PY = Int(PY)
 PValue = Int(PValue)
 
 Offset = Width_ * (PY - 1)
 
 If (PX > 0 And PX <= Width_) And (PY > 0 And PY <= Height_) Then
 Image = LeftB(Image, Offset + (PX - 1)) & ChrB(PValue) & RightB(Image, LenB(Image) - (Offset + PX))
 End If
 End Property
 
 Public Sub Clear()
 Image = String(Width_ * (Height_ + 1) / 2, ChrB(BGroundColorIndex) & ChrB(BGroundColorIndex))
 End Sub
 
 字串6 
 Public Sub Resize(ByVal NewWidth, ByVal NewHeight, RPreserve)
 Dim OldImage, OldWidth, OldHeight
 Dim CopyWidth, CopyHeight
 Dim X, Y
 
 If RPreserve Then
 OldImage = Image
 OldWidth = Width_
 OldHeight = Height_
 End If
 
 Width_ = NewWidth
 Height_ = NewHeight
 
 Clear
 
 If RPreserve Then
 If NewWidth > OldWidth Then CopyWidth = OldWidth Else CopyWidth = NewWidth
 If NewHeight > OldHeight Then CopyHeight = OldHeight Else CopyHeight = NewHeight
 
 Width_ = NewWidth
 Height_ = NewHeight
 
 For Y = 1 To CopyHeight
 For X = 1 To CopyWidth 字串9
 Pixel(X, Y) = AscB(MidB(OldImage, (OldWidth * (Y - 1)) + X, 1))
 Next
 Next
 End If
 End Sub
 
 Private Function ShiftLeft(SLValue, SLBits)
 ShiftLeft = SLValue * (2 ^ SLBits)
 End Function
 
 Private Function ShiftRight(SRValue, SRBits)
 ShiftRight = Int(SRValue / (2 ^ SRBits))
 End Function
 
 Private Function Low(LValue)
 Low = LValue And &HFF
 End Function
 
 Private Function High(HValue)
 High = ShiftRight(HValue, 8)
 End Function
 
 Private Function Blue(BValue)
 Blue = Low(ShiftRight(BValue, 16))
 End Function
 
 Private Function Green(GValue)
 Green = Low(ShiftRight(GValue, 8))
 End Function
 
 Private Function Red(RValue)
 
 字串6 Red = Low(RValue)
 End Function
 
 Private Function MakeColor(MCValue)
 MakeColor = CLng("&H" & Right(MCValue, 2) & Mid(MCValue, 4, 2) & Mid(MCValue, 2, 2))
 End Function
 
 Private Function GetWord(GWValue)
 GetWord = ShiftLeft(AscB(RightB(GWValue, 1)), 8) Or AscB(LeftB(GWValue, 1))
 End Function
 
 Private Function MakeWord(MWValue)
 MakeWord = ChrB(Low(MWValue)) & ChrB(High(MWValue))
 End Function
 
 Private Function MakeByte(MBValue)
 MakeByte = ChrB(Low(MBValue))
 End Function
 
 Private Function UncompressedData()
 Dim ClearCode, ChunkMax, EndOfStream
 Dim UDData, UD, U
 
 UncompressedData = ""
 
 ClearCode = 2 ^ Bits
 ChunkMax = 2 ^ Bits - 2
 EndOfStream = ClearCode + 1
 
 字串2 
 UDData = ""
 
 For U = 1 To LenB(Image) Step ChunkMax
 UDData = UDData & MidB(Image, U, ChunkMax) & ChrB(ClearCode)
 Next
 
 For U = 1 To LenB(UDData) Step &HFF
 UD = MidB(UDData, U, &HFF)
 UncompressedData = UncompressedData & MakeByte(LenB(UD)) & UD
 Next
 
 UncompressedData = UncompressedData & MakeByte(&H00)
 UncompressedData = UncompressedData & MakeByte(EndOfStream)
 End Function
 
 Private Function GetGColorTable()
 Dim GGCT
 
 GetGColorTable = ""
 
 For GGCT = 0 To UBound(GlobalColorTable) - 1
 GetGColorTable = GetGColorTable & MakeByte(Red(GlobalColorTable(GGCT)))
 GetGColorTable = GetGColorTable & MakeByte(Green(GlobalColorTable(GGCT)))
 
 字串1 GetGColorTable = GetGColorTable & MakeByte(Blue(GlobalColorTable(GGCT)))
 Next
 End Function
 
 Private Function GetLColorTable()
 Dim GLCT
 
 GetLColorTable = ""
 
 For GLCT = 0 To UBound(LocalColorTable) - 1
 GetLColorTable = GetLColorTable & MakeByte(Red(LocalColorTable(GLCT)))
 GetLColorTable = GetLColorTable & MakeByte(Green(LocalColorTable(GLCT)))
 GetLColorTable = GetLColorTable & MakeByte(Blue(LocalColorTable(GLCT)))
 Next
 End Function
 
 Private Function GlobalDescriptor()
 GlobalDescriptor = 0
 
 If GlobalColorTableFlag Then GlobalDescriptor = GlobalDescriptor Or ShiftLeft(1, 7)
 GlobalDescriptor = GlobalDescriptor Or ShiftLeft(ColorResolution, 7)
 If SortFlag Then GlobalDescriptor = GlobalDescriptor Or ShiftLeft(1, 3) 字串6
 GlobalDescriptor = GlobalDescriptor Or GlobalColorTableSize
 End Function
 
 Private Function LocalDescriptor()
 LocalDescriptor = 0
 
 If LocalColorTableFlag Then LocalDescriptor = LocalDescriptor Or ShiftLeft(1, 7)
 If InterlaceFlag Then LocalDescriptor = LocalDescriptor Or ShiftLeft(1, 6)
 If SortFlag Then LocalDescriptor = LocallDescriptor Or ShiftLeft(1, 5)
 LocalDescriptor = LocalDescriptor Or ShiftLeft(Reserved, 3)
 LocalDescriptor = LocalDescriptor Or LocalColorTableSize
 End Function
 
 Private Property Get ImageData()
 Dim Text, I
 
 ImageData = GIFHeader
 ImageData = ImageData & MakeWord(Width_)
 ImageData = ImageData & MakeWord(Height_)
 ImageData = ImageData & MakeByte(GlobalDescriptor)
 ImageData = ImageData & MakeByte(BGroundColorIndex)
 
 字串3 ImageData = ImageData & MakeByte(PixelAspectRatio)
 ImageData = ImageData & GetGColorTable
 
 If GIF89a Then
 If UseTransparency Then
 ImageData = ImageData & MakeByte(GraphicControl)
 ImageData = ImageData & MakeByte(&HF9)
 ImageData = ImageData & MakeByte(&H04)
 ImageData = ImageData & MakeByte(&H01)
 ImageData = ImageData & MakeByte(&H00)
 ImageData = ImageData & MakeByte(TransparentColorIndex)
 ImageData = ImageData & MakeByte(&H00)
 End If
 
 If Comment <> "" Then
 ImageData = ImageData & MakeByte(GraphicControl)
 
 字串5 ImageData = ImageData & MakeByte(&HFE)
 Text = Left(Comment, &HFF)
 ImageData = ImageData & MakeByte(Len(Text))
 For I = 1 To Len(Text)
 ImageData = ImageData & MakeByte(Asc(Mid(Text, I, 1)))
 Next
 ImageData = ImageData & MakeByte(&H00)
 End If
 End If
 
 ImageData = ImageData & MakeByte(Seperator)
 ImageData = ImageData & MakeWord(LeftPosition)
 ImageData = ImageData & MakeWord(TopPosition)
 ImageData = ImageData & MakeWord(Width_)
 ImageData = ImageData & MakeWord(Height_)
 ImageData = ImageData & MakeByte(LocalDescriptor)
 
 字串9 ImageData = ImageData & MakeByte(CodeSize)
 ImageData = ImageData & UncompressedData
 ImageData = ImageData & MakeByte(&H00)
 ImageData = ImageData & MakeByte(EndOfImage)
 End Property
 
 Public Sub ImgWrite()
 Response.ContentType = "image/gif"
 Response.BinaryWrite ImageData
 End Sub
 
 Private Function GIFHeader()
 GIFHeader = ""
 GIFHeader = GIFHeader & ChrB(Asc("G"))
 GIFHeader = GIFHeader & ChrB(Asc("I"))
 GIFHeader = GIFHeader & ChrB(Asc("F"))
 GIFHeader = GIFHeader & ChrB(Asc("8"))
 If GIF89a Then
 GIFHeader = GIFHeader & ChrB(Asc("9"))
 Else
 GIFHeader = GIFHeader & ChrB(Asc("7"))
 
 字串1 End If
 GIFHeader = GIFHeader & ChrB(Asc("a"))
 End Function
 
 Public Sub VerifyCode(Text, VCColor)
 Dim I1, I2, I3
 Dim VCX, VCY, VCIndex
 
 Resize 14 * Len(Text) + 10, UBound(Letter) + 10, False
 
 Randomize
 VCX = Int(Rnd * 10)
 VCY = Int(Rnd * (Height_ - UBound(Letter)))
 
 For I1 = 0 To UBound(Letter) - 1
 For I2 = 1 To Len(Text)
 For I3 = 1 To Len(Font(Mid(Text, I2, 1))(I1))
 VCIndex = CLng(Mid(Font(Mid(Text, I2, 1))(I1), I3, 1))
 
 If VCIndex <> 0 Then
 If VCColor Then
 Randomize
 VCIndex = Int(Rnd * 7)
 
 字串5 End If
 
 Pixel(VCX + ((I2 - 1) * Len(Letter(0))) + I3, VCY + I1) = VCIndex
 End If
 Next
 Next
 Next
 End Sub
 
 Public Sub Noises(Amount, NColor)
 Dim NI, NIndex
 
 For NI = 1 To Amount
 NIndex = 1
 
 If NColor Then
 Randomize
 NIndex = Int(Rnd * 7)
 End If
 
 Pixel(Int(Rnd * Width_), Int(Rnd * Height_)) = NIndex
 Next
 End Sub
 
 End Class
 %>
 
 用法
 
 <%
 Dim GBL_CookieName
 GBL_CookieName = "gbl_codename" '指定一個(gè)想對(duì)本站的cookie
 
 字串4 
 
 Call ShowCode(GBL_CookieName & Request("CodeName")) 'request("CodeName")指定一個(gè)相對(duì)驗(yàn)證碼的cookie
 '驗(yàn)證碼
 Sub ShowCode(ShowCodeName)
 Set img = New fly38_VerifyCode
 Randomize
 Dim code
 code = Int(Rnd * 9000 + 1000)
 Session(ShowCodeName) = code
 img.BGroundColor = "#FFFFFF" ' 圖片背景顏色
 img.FGroundColor = "#FF0000" ' 前景(文本)顏色
 Call img.VerifyCode(code, False) ' 處理驗(yàn)證碼,第二個(gè)參數(shù)為是否顯示彩色文本
 Call img.Noises(100, True) ' 添加雜點(diǎn),第一個(gè)參數(shù)為雜點(diǎn)數(shù)量,第二個(gè)參數(shù)為是否顯示彩色雜點(diǎn)
 img.ImgWrite ' 輸出圖片
 End Sub
 %>
 | 
 該文章在 2012/2/22 14:00:45 編輯過(guò)
 | 
				
				關(guān)鍵字查詢(xún) 相關(guān)文章 |