Copy codeThe Code is as follows: <%
Option Explicit 'display Declaration
Class Com_GifCode_Class
'''''''''''''''''''''''''''''''''''''''' '''''
'Author: Layen support@ssaw.net 84815733 (QQ)
'Thanks: Laomi, Laomiao, NetRube
'2006-01-02
'''''''''''''''''''''''''''''''''''''''' '''''
Public Noisy, Count, Width, Height, Angle, Offset, Border
Private Graph (), Margin (3)
Private Sub Class_Initialize ()
Randomize
Noisy = 16' probability of occurrence of interference points
Count = 4' Character Count
Width = 80' Image Width
Height = 20' Image Height
Angle = 2' random Angle variation
Offset = 20' Offset random variation
Border = 1' Border size
End Sub
Public Function Create ()
Const ccharsets = "123456789"
Dim I, x, y
Dim vValidCode: vValidCode = ""
Dim vIndex
ReDim Graph (Width-1, Height-1)
For I = 0 To Count-1
VIndex = Int (Rnd * Len (cCharSet ))
VValidCode = vValidCode + Mid (cCharSet, vIndex + 1, 1)
SetDraw vIndex, I
Next
Create = vValidCode
End Function
Sub SetDot (pX, pY)
If pX * (Width-pX-1)> = 0 And pY * (Height-pY-1)> = 0 Then
Graph (pX, pY) = 1
End If
End Sub
Public Sub SetDraw (pIndex, pNumber)
'Character data
Dim DotData (8)
DotData (0) = Array (30, 15, 50, 1, 50,100)
DotData (1) = Array (1, 34, 30, 1, 71, 1,100, 34, 1,100, 93,100,100, 86)
DotData (2) = Array (1, 1,100, 1, 42, 42,100, 70, 50,100, 1, 70)
DotData (3) = Array (100, 73, 6, 73, 75, 6, 75,100)
DotData (4) = Array (100, 1, 1, 1, 1, 50, 50, 35,100, 55,100, 80, 50,100, 1, 95)
DotData (5) = Array (100, 20, 70, 1, 20, 1, 1, 30, 1, 80, 30,100, 70,100,100, 80,100, 60, 70, 50, 30, 50, 1, 60)
DotData (6) = Array (6, 26, 6, 6,100, 6, 53,100)
DotData (7) = Array (100, 30,100, 20, 70, 1, 30, 1, 1, 20, 1, 30,100, 70,100, 80, 70,100, 30,100, 1, 80, 1, 70,100, 30)
DotData (8) = Array (1, 80, 30,100, 80,100,100, 70,100, 20, 70, 1, 30, 1, 1, 20, 1, 40, 30, 50, 70, 50,100, 40)
Dim vExtent: vExtent = Width/Count
Margin (0) = Border + vExtent * (Rnd * Offset)/100 + Margin (1)
Margin (1) = vExtent * (pNumber + 1)-Border-vExtent * (Rnd * Offset)/100
Margin (2) = Border + Height * (Rnd * Offset)/100
Margin (3) = Height-Border-Height * (Rnd * Offset)/100
Dim vStartX, vEndX, vStartY, vEndY
Dim vWidth, vHeight, vDX, vDY, vDeltaT
Dim vAngle, vLength
VWidth = Int (Margin (1)-Margin (0 ))
VHeight = Int (Margin (3)-Margin (2 ))
'Start Coordinate
VStartX = Int (DotData (pIndex) (0)-1) * vWidth/100)
VStartY = Int (DotData (pIndex) (1)-1) * vHeight/100)
Dim I, j
For I = 1 To UBound (DotData (pIndex), 1)/2
If DotData (pIndex) (2 * I-2) <> 0 And DotData (pIndex) (2 * I) <> 0 Then
'Terminal Coordinate
VEndX = (DotData (pIndex) (2 * I)-1) * vWidth/100
VEndY = (DotData (pIndex) (2 x I + 1)-1) * vHeight/100
'Horizontal gap
VDX = vEndX-vStartX
'Vertical gap
VDY = vEndY-vStartY
'Skew Angle
If vDX = 0 Then
VAngle = Sgn (vDY) * 3.14/2
Else
VAngle = Atn (vDY/vDX)
End If
'Coordinate distance
If Sin (vAngle) = 0 Then
VLength = vDX
Else
VLength = vDY/Sin (vAngle)
End If
'Random rotation angular
VAngle = vAngle + (Rnd-0.5) * 2 * Angle * 3.14*2/100
VDX = Int (Cos (vAngle) * vLength)
VDY = Int (Sin (vAngle) * vLength)
If Abs (vDX)> Abs (vDY) Then vDeltaT = Abs (vDX) Else vDeltaT = Abs (vDY)
For j = 1 To vDeltaT
SetDot Margin (0) + vStartX + j * vDX/vDeltaT, Margin (2) + vStartY + j * vDY/vDeltaT
Next
VStartX = vStartX + vDX
VStartY = vStartY + vDY
End If
Next
End Sub
Public Sub Output ()
Response. Expires =-9999
Response. AddHeader "pragma", "no-cache"
Response. AddHeader "cache-ctrol", "no-cache"
Response. ContentType = "image/gif"
'File type
Response. BinaryWrite ChrB (Asc ("G") & ChrB (Asc ("I") & ChrB (Asc ("F "))
'Version info
Response. BinaryWrite ChrB (Asc ("8") & ChrB (Asc ("9") & ChrB (Asc (""))
'Logical screen width
Response. BinaryWrite ChrB (Width Mod 256) & ChrB (Width \ 256) Mod 256)
'Logical screen height
Response. BinaryWrite ChrB (Height Mod 256) & ChrB (Height \ 256) Mod 256)
Response. BinaryWrite ChrB (128) & ChrB (0) & ChrB (0)
'Global color list
Response. BinaryWrite ChrB (255) & ChrB (255) & ChrB (255)
Response. BinaryWrite ChrB (0) & ChrB (85) & chrb( 255)
'Image identifier
Response. BinaryWrite ChrB (Asc (","))
Response. BinaryWrite ChrB (0) & ChrB (0) & ChrB (0) & ChrB (0)
'Image width
Response. BinaryWrite ChrB (Width Mod 256) & ChrB (Width \ 256) Mod 256)
'Image height
Response. BinaryWrite ChrB (Height Mod 256) & ChrB (Height \ 256) Mod 256)
Response. BinaryWrite ChrB (0) & ChrB (7) & chrb( 255)
Dim x, y, I: I = 0
For y = 0 To Height-1
For x = 0 To Width-1
If Rnd <Noisy/100 Then
Response. BinaryWrite ChrB (1-Graph (x, y ))
Else
If x * (x-Width) = 0 Or y * (y-Height) = 0 Then
Response. BinaryWrite ChrB (Graph (x, y ))
Else
If Graph (x-1, y) = 1 Or Graph (x, y) Or Graph (x, Y-1) = 1 Then
Response. BinaryWrite ChrB (1)
Else
Response. BinaryWrite ChrB (0)
End If
End If
End If
If (y * Width + x + 1) Mod 126 = 0 Then
Response. BinaryWrite chrb( 128)
I = I + 1
End If
If (y * Width + x + I + 1) Mod 255 = 0 Then
If (Width * Height-y * Width-x-1)> 255 Then
Response. BinaryWrite chrb( 255)
Else
Response. BinaryWrite ChrB (Width * Height Mod 255)
End If
End If
Next
Next
Response. BinaryWrite ChrB (128) & ChrB (0) & ChrB (129) & ChrB (0) & ChrB (59)
End Sub
End Class
Dim mCode
Set mCode = New Com_GifCode_Class
Session ("GetCode") = mCode. Create ()
MCode. Output ()
Set mCode = Nothing
%>