文章·资料 电脑软件 手机应用 网站源码




    本 站 搜 索
   推 荐 文 章        More...
华硕易电脑(ASUS Eee PC 1025C..
先来段开场白:为了外出携带方便,到淘..
Acronis True Image 使用说明
  一款可以在Windows下使用全部功..
Norton Ghost 使用详解
一、分区备份   使用Ghost进行系..
    文 章 阅 读 排 行
手机视频监控 APP 关闭广告:萤..
一、萤石云视频:我的,设置,隐私设置,..
常见数据库介绍与对比(SQL Serv..
常见数据库的对比分析,涵盖你提到的 A..
Windows 系统修改默认文件类型..
Windows 系统文件类型图标,通常由默..
Windows 系统安装或备份时 ISO,..
【ISO 文件】 ISO 文件其实就是光..
Microsoft SQL Server 2000 Per..
  对于第一次安装 Microsoft SQL Se..
颜色与英文单词对照
颜色与英文单词对照 red green bl..
PakePlus 构建 APP 需要 Github..
PakePlus 是一个基于 Rust Tauri 的..
主页真的越Google、越简洁越好吗
  如果你在11月10日早上打开雅虎中..
网络工程师必懂的专业术语
路由器问题:1、什么时候使用多路由协..
为啥现在的电脑都不能安装 Wind..
说实话,这几年如果你尝试在新电脑..
 文 章 信 息
无组件生成验证码-GIF格式
评论()〗〖留言〗〖收藏
〖文章分类:电脑·手机·网络 / 网站设计·开发·优化〗〖阅读选项
无组件生成验证码-GIF格式 

来自:蓝色理想 
<% 
Option Explicit ’ 显示声明 

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 ’ 干扰点出现的概率 
Count = 4 ’ 字符数量 
Width = 80 ’ 图片宽度 
Height = 20 ’ 图片高度 
Angle = 2 ’ 角度随机变化量 
Offset = 20 ’ 偏移随机变化量 
Border = 1 ’ 边框大小 
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) 

’ 字符数据 
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)) 

’ 起始坐标 
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 

’ 终点坐标 
vEndX = (DotData(pIndex)(2*i)-1) * vWidth / 100 

vEndY = (DotData(pIndex)(2*i+1)-1) * vHeight / 100 

’ 横向差距 
vDX = vEndX - vStartX 
’ 纵向差距 
vDY = vEndY - vStartY 

’ 倾斜角度 
If vDX = 0 Then 
vAngle = Sgn(vDY) * 3.14/2 
Else 
vAngle = Atn(vDY / vDX) 
End If 

’ 两坐标距离 
If Sin(vAngle) = 0 Then 
vLength = vDX 
Else 
vLength = vDY / Sin(vAngle) 
End If 

’ 随机转动角度 
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" 

’ 文件类型 
Response.BinaryWrite ChrB(Asc("G")) & ChrB(Asc("I")) & ChrB(Asc("F")) 
’ 版本信息 
Response.BinaryWrite ChrB(Asc("8")) & ChrB(Asc("9")) & ChrB(Asc("a")) 
’ 逻辑屏幕宽度 
Response.BinaryWrite ChrB(Width Mod 256) & ChrB((Width \ 256) Mod 256) 
’ 逻辑屏幕高度 
Response.BinaryWrite ChrB(Height Mod 256) & ChrB((Height \ 256) Mod 256) 

Response.BinaryWrite ChrB(128) & ChrB(0) & ChrB(0) 
’ 全局颜色列表 
Response.BinaryWrite ChrB(255) & ChrB(255) & ChrB(255) 

Response.BinaryWrite ChrB(0) & ChrB(85) & ChrB(255) 

’ 图象标识符 
Response.BinaryWrite ChrB(Asc(",")) 

Response.BinaryWrite ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) 
’ 图象宽度 
Response.BinaryWrite ChrB(Width Mod 256) & ChrB((Width \ 256) Mod 256) 
’ 图象高度 
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 
%> 
保存成ASP文件即可看见效果! 

文章作者:未知  更新日期:2006-05-13
〖文章浏览:〗〖发送文章〗〖打印文章
相关文章 ·无组件生成验证码-BMP格式2006-05-13