仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 471|回复: 7
打印 上一主题 下一主题

[学习教程] ASP教程之ASP完成无组件天生考证码-GIF格局

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:19:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
专业性的服务。有的ASP商提供垂直型的应用服务,针对某一特定行业提供应用服务。无组件|考证码<%
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
%>
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧
再现理想 该用户已被删除
沙发
发表于 2015-1-19 08:48:00 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-28 05:53:45 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
小女巫 该用户已被删除
地板
发表于 2015-2-5 16:55:16 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
简单生活 该用户已被删除
5#
发表于 2015-2-13 01:01:51 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
飘飘悠悠 该用户已被删除
6#
发表于 2015-3-3 12:07:28 | 只看该作者
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-11 11:08:09 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
若相依 该用户已被删除
8#
发表于 2015-3-18 08:08:50 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 13:42

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表