<%
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 = 1 ' probability of interference points appearing
Count = 4 ' character quantity
width = 80 ' picture widths
Height = 20 ' picture Heights
Angle = 1 ' angular random change amount
offset = 10 ' offset random change amount
border = 1 ' border size
End Sub
Public Function Create ()
Const CCHARSET = "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 (1, m)
Dotdata (1) = Array (1, 34, 30, 1, 71, 1, 10 0, 1, dotdata
(2) = Array (1, 1, MB, 1,, 1, m)
Dotdata (3) = AR (+) (+) =. 6 (4) = Array (100, 1, 1, 1, 1, 50, 50, 35, 100, 55, 100, 80, 50, 100, 1, 95) (Dotdata)
br> Dotdata (5) = Array (+, 1, 1, 1,, 1,, 1, M, M, MB),
., (a), (a),- Dotdata (6) = Array (6, 6, 6,, 6,)
Dotdata (7) = Array (100, 30, 100, 20, 70, 1, 30, 1, 1, 20, 1, 30, 100 , Dotdata, 1, 1, (8) = Array (1, 80, 30, 100, 80, 100, 100, 70, 100, 20,)
-----) 1, 1, 1, 1, M, A, M,, ()
Dim Vextent:vextent = Width/count
Margin (0) = border + vextent * (RND * offset)/MB + 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 coordinates
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
' Endpoint coordinates
Vendx = (Dotdata (pindex) (2*i)-1) * vwidth/100
Vendy = (Dotdata (pindex) (2*i+1)-1) * vheight/100
' Horizontal gap
VDX = Vendx-vstartx
' Vertical gap
Vdy = Vendy-vstarty
' Tilt angle
If vdx = 0 Then
Vangle = SGN (vdy) * 3.14/2
Else
Vangle = ATN (VDY/VDX)
End If
' Two coordinate distance
If sin (vangle) = 0 Then
Vlength = VDX
Else
Vlength = Vdy/sin (vangle)
End If
' Random rotation angle
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 information
Response.BinaryWrite CHRB (ASC ("8")) & ChrB (ASC ("9")) & ChrB (ASC ("a"))
' 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 (0) & ChrB (0)
' 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
Respons E.binarywrite ChrB (1-graph (x, y))
Else
if x * (x-width) = 0 or Y * (y-height) = 0 Then
Response.BinaryWrite Ch RB (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*h Eight-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
End Sub
End class
Dim Mcode
Set Mcode = new Com_gifcode_class
Session ("GetCode") = Mcode.create ()
Mcode.output ()
Set Mcod E = Nothing
%>