用asp实现无组件生成验证码的方法2种
用asp实现无组件生成验证码的方法2种
发布时间:2016-12-29 来源:查字典编辑
摘要:无组件生成验证码-GIF格式复制代码代码如下:

无组件生成验证码-GIF格式

复制代码 代码如下:

<%

OptionExplicit'显示声明

ClassCom_GifCode_Class

'''''''''''''''''''''''''''''''''''''''''''''

'Author:Layensupport@ssaw.net84815733(QQ)

'Thanks:Laomi,Laomiao,NetRube

'2006-01-02

'''''''''''''''''''''''''''''''''''''''''''''

PublicNoisy,Count,Width,Height,Angle,Offset,Border

PrivateGraph(),Margin(3)

PrivateSubClass_Initialize()

Randomize

Noisy=16'干扰点出现的概率

Count=4'字符数量

Width=80'图片宽度

Height=20'图片高度

Angle=2'角度随机变化量

Offset=20'偏移随机变化量

Border=1'边框大小

EndSub

PublicFunctionCreate()

ConstcCharSet="123456789"

Dimi,x,y

DimvValidCode:vValidCode=""

DimvIndex

ReDimGraph(Width-1,Height-1)

Fori=0ToCount-1

vIndex=Int(Rnd*Len(cCharSet))

vValidCode=vValidCode+Mid(cCharSet,vIndex+1,1)

SetDrawvIndex,i

Next

Create=vValidCode

EndFunction

SubSetDot(pX,pY)

IfpX*(Width-pX-1)>=0AndpY*(Height-pY-1)>=0Then

Graph(pX,pY)=1

EndIf

EndSub

PublicSubSetDraw(pIndex,pNumber)

'字符数据

DimDotData(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)

DimvExtent: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

DimvStartX,vEndX,vStartY,vEndY

DimvWidth,vHeight,vDX,vDY,vDeltaT

DimvAngle,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)

Dimi,j

Fori=1ToUBound(DotData(pIndex),1)/2

IfDotData(pIndex)(2*i-2)<>0AndDotData(pIndex)(2*i)<>0Then

'终点坐标

vEndX=(DotData(pIndex)(2*i)-1)*vWidth/100

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

'横向差距

vDX=vEndX-vStartX

'纵向差距

vDY=vEndY-vStartY

'倾斜角度

IfvDX=0Then

vAngle=Sgn(vDY)*3.14/2

Else

vAngle=Atn(vDY/vDX)

EndIf

'两坐标距离

IfSin(vAngle)=0Then

vLength=vDX

Else

vLength=vDY/Sin(vAngle)

EndIf

'随机转动角度

vAngle=vAngle+(Rnd-0.5)*2*Angle*3.14*2/100

vDX=Int(Cos(vAngle)*vLength)

vDY=Int(Sin(vAngle)*vLength)

IfAbs(vDX)>Abs(vDY)ThenvDeltaT=Abs(vDX)ElsevDeltaT=Abs(vDY)

Forj=1TovDeltaT

SetDotMargin(0)+vStartX+j*vDX/vDeltaT,Margin(2)+vStartY+j*vDY/vDeltaT

Next

vStartX=vStartX+vDX

vStartY=vStartY+vDY

EndIf

Next

EndSub

PublicSubOutput()

Response.Expires=-9999

Response.AddHeader"pragma","no-cache"

Response.AddHeader"cache-ctrol","no-cache"

Response.ContentType="image/gif"

'文件类型

Response.BinaryWriteChrB(Asc("G"))&ChrB(Asc("I"))&ChrB(Asc("F"))

'版本信息

Response.BinaryWriteChrB(Asc("8"))&ChrB(Asc("9"))&ChrB(Asc("a"))

'逻辑屏幕宽度

Response.BinaryWriteChrB(WidthMod256)&ChrB((Width256)Mod256)

'逻辑屏幕高度

Response.BinaryWriteChrB(HeightMod256)&ChrB((Height256)Mod256)

Response.BinaryWriteChrB(128)&ChrB(0)&ChrB(0)

'全局颜色列表

Response.BinaryWriteChrB(255)&ChrB(255)&ChrB(255)

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

'图象标识符

Response.BinaryWriteChrB(Asc(","))

Response.BinaryWriteChrB(0)&ChrB(0)&ChrB(0)&ChrB(0)

'图象宽度

Response.BinaryWriteChrB(WidthMod256)&ChrB((Width256)Mod256)

'图象高度

Response.BinaryWriteChrB(HeightMod256)&ChrB((Height256)Mod256)

Response.BinaryWriteChrB(0)&ChrB(7)&ChrB(255)

Dimx,y,i:i=0

Fory=0ToHeight-1

Forx=0ToWidth-1

IfRnd<Noisy/100Then

Response.BinaryWriteChrB(1-Graph(x,y))

Else

Ifx*(x-Width)=0Ory*(y-Height)=0Then

Response.BinaryWriteChrB(Graph(x,y))

Else

IfGraph(x-1,y)=1OrGraph(x,y)OrGraph(x,y-1)=1Then

Response.BinaryWriteChrB(1)

Else

Response.BinaryWriteChrB(0)

EndIf

EndIf

EndIf

If(y*Width+x+1)Mod126=0Then

Response.BinaryWriteChrB(128)

i=i+1

EndIf

If(y*Width+x+i+1)Mod255=0Then

If(Width*Height-y*Width-x-1)>255Then

Response.BinaryWriteChrB(255)

Else

Response.BinaryWriteChrB(Width*HeightMod255)

EndIf

EndIf

Next

Next

Response.BinaryWriteChrB(128)&ChrB(0)&ChrB(129)&ChrB(0)&ChrB(59)

EndSub

EndClass

DimmCode

SetmCode=NewCom_GifCode_Class

Session("GetCode")=mCode.Create()

mCode.Output()

SetmCode=Nothing

%>

无组件生成验证码-BMP格式

复制代码 代码如下:

CallCom_CreatValidCode("ValidCode")

SubCom_CreatValidCode(pSN)

'Author:Layen

'QQ:84815733

'E-mail:support@ssaw.net

'禁止缓存

Response.Expires=-9999

Response.AddHeader"Pragma","no-cache"

Response.AddHeader"cache-ctrol","no-cache"

Response.ContentType="Image/BMP"

Randomize

Dimi,ii,iii

ConstcOdds=8'杂点出现的机率

ConstcAmount=36'文字数量

ConstcCode="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

'颜色的数据(字符,背景)

DimvColorData(1)

vColorData(0)=ChrB(0)&ChrB(0)&ChrB(0)'蓝0,绿0,红0(黑色)

vColorData(1)=ChrB(250)&ChrB(236)&ChrB(211)'蓝250,绿236,红211(浅蓝色)

'随机产生字符

DimvCode(4),vCodes

Fori=0To3

vCode(i)=Int(Rnd*cAmount)

vCodes=vCodes&Mid(cCode,vCode(i)+1,1)

Next

Session(pSN)=vCodes'记录入Session

'字符的数据

DimvNumberData(35)

vNumberData(0)="1110000111110111101111011110111101001011110100101111

010010111101001011110111101111011110111110000111"

vNumberData(1)="1111011111110001111111110111111111011111111101111111

110111111111011111111101111111110111111100000111"

vNumberData(2)="1110000111110111101111011110111111111011111111011111

111011111111011111111011111111011110111100000011"

vNumberData(3)="1110000111110111101111011110111111110111111100111111

111101111111111011110111101111011110111110000111"

vNumberData(4)="1111101111111110111111110011111110101111110110111111

011011111100000011111110111111111011111111000011"

vNumberData(5)="1100000011110111111111011111111101000111110011101111

111110111111111011110111101111011110111110000111"

vNumberData(6)="1111000111111011101111011111111101111111110100011111

001110111101111011110111101111011110111110000111"

vNumberData(7)="1100000011110111011111011101111111101111111110111111

110111111111011111111101111111110111111111011111"

vNumberData(8)="1110000111110111101111011110111101111011111000011111

101101111101111011110111101111011110111110000111"

vNumberData(9)="1110001111110111011111011110111101111011110111001111

100010111111111011111111101111011101111110001111"

vNumberData(10)="1111011111111101111111101011111110101111111010111111

101011111100000111110111011111011101111000100011"

vNumberData(11)="1000000111110111101111011110111101110111110000111111

011101111101111011110111101111011110111000000111"

vNumberData(12)="1110000011110111101110111110111011111111101111111110

111111111011111111101111101111011101111110001111"

vNumberData(13)="10000011111101110111110111101111011110111101111011110

11110111101111011110111101111011101111000001111"

vNumberData(14)="10000001111101111011110110111111011011111100001111110

11011111101101111110111111111011110111000000111"

vNumberData(15)="10000001111101111011110110111111011011111100001111110

11011111101101111110111111111011111111000111111"

vNumberData(16)="11100001111101110111101111011110111111111011111111101

11111111011100011101111011111011101111110001111"

vNumberData(17)="10001000111101110111110111011111011101111100000111110

11101111101110111110111011111011101111000100011"

vNumberData(18)="11000001111111011111111101111111110111111111011111111

10111111111011111111101111111110111111100000111"

vNumberData(19)="11100000111111101111111110111111111011111111101111111

11011111111101111111110111110111011111000011111"

vNumberData(20)="10001000111101110111110110111111010111111100011111110

10111111101101111110110111111011101111000100011"

vNumberData(21)="10001111111101111111110111111111011111111101111111110

11111111101111111110111111111011110111000000011"

vNumberData(22)="10001000111100100111110010011111001001111101010111110

10101111101010111110101011111010101111001010011"

vNumberData(23)="10001000111100110111110011011111010101111101010111110

10101111101100111110110011111011001111000110111"

vNumberData(24)="11100011111101110111101111101110111110111011111011101

11110111011111011101111101111011101111110001111"

vNumberData(25)="10000001111101111011110111101111011110111100000111110

11111111101111111110111111111011111111000111111"

vNumberData(26)="11100011111101110111101111101110111110111011111011101

11110111011111011101001101111011001111110001011"

vNumberData(27)="10000011111101110111110111011111011101111100001111110

10111111101101111110110111111011101111000110011"

vNumberData(28)="11100000111101111011110111101111011111111110011111111

11001111111111011110111101111011110111100000111"

vNumberData(29)="10000000111011011011111101111111110111111111011111111

10111111111011111111101111111110111111110001111"

vNumberData(30)="10001000111101110111110111011111011101111101110111110

11101111101110111110111011111011101111110001111"

vNumberData(31)="10001000111101110111110111011111011101111110101111111

01011111110101111111010111111110111111111011111"

vNumberData(32)="10010100111101010111110101011111010101111101010111110

01001111110101111111010111111101011111110101111"

vNumberData(33)="10001000111101110111111010111111101011111111011111111

10111111110101111111010111111011101111000100011"

vNumberData(34)="10001000111101110111110111011111101011111110101111111

10111111111011111111101111111110111111110001111"

vNumberData(35)="11000000111101110111111111011111111011111111101111111

10111111111011111111011111111101110111100000011"

'输出图像文件头

Response.BinaryWriteChrB(66)&ChrB(77)&ChrB(230)&ChrB(4)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(0)&_

ChrB(0)&ChrB(0)&ChrB(54)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(40)&ChrB(0)&_

ChrB(0)&ChrB(0)&ChrB(40)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(10)&ChrB(0)&_

ChrB(0)&ChrB(0)&ChrB(1)&ChrB(0)

'输出图像信息头

Response.BinaryWriteChrB(24)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(176)&ChrB(4)&_

ChrB(0)&ChrB(0)&ChrB(18)&ChrB(11)&ChrB(0)&ChrB(0)&ChrB(18)&ChrB(11)&_

ChrB(0)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(0)&ChrB(0)&_

ChrB(0)&ChrB(0)

Fori=9To0Step-1'历经所有行

Forii=0To3'历经所有字

Foriii=1To10'历经所有像素

'逐行、逐字、逐像素地输出图像数据

IfRnd*99+1<cOddsThen'随机生成杂点

Response.BinaryWritevColorData(0)

Else

Response.BinaryWritevColorData(Mid(vNumberData(vCode(ii)),i*10+iii,1))

EndIf

Next

Next

Next

EndSub

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新ASP教程学习
热门ASP教程学习
编程开发子分类