用asp怎么编写验证码?
使用ASP生成彩色校验码
49行代码,三个文件
Asp文件:CodeAsp
数据文件:bodyFix , HeadFix
用法:<img src="codeasp">
<%
Option Explicit
Responsebuffer=true
NumCode
Function NumCode()
ResponseExpires = -1
ResponseAddHeader "Pragma","no-cache"
ResponseAddHeader "cache-ctrol","no-cache"
dim zNum,i,j
dim Ados,Ados1
Randomize timer
zNum = cint(8999Rnd+1000)
Session("GetCode") = zNum
dim zimg(4),NStr
NStr=cstr(zNum)
For i=0 to 3
zimg(i)=cint(mid(NStr,i+1,1))
Next
dim Pos
set Ados=ServerCreateObject("AdodbStream")
AdosMode=3
AdosType=1
AdosOpen
set Ados1=ServerCreateObject("AdodbStream")
Ados1Mode=3
Ados1Type=1
Ados1Open
AdosLoadFromFile(Servermappath("bodyFix"))
Ados1write Adosread(1280)
for i=0 to 3
AdosPosition=(9-zimg(i))320
Ados1Position=i320
Ados1write adosread(320)
next
AdosLoadFromFile(Servermappath("headfix"))
Pos=lenb(Adosread())
AdosPosition=Pos
for i=0 to 9 step 1
for j=0 to 3
Ados1Position=i32+j320
AdosPosition=Pos+30j+i120
Adoswrite ados1read(30)
next
next
ResponseContentType = "image/BMP"
AdosPosition=0
ResponseBinaryWrite Adosread()
AdosClose:set Ados=nothing
Ados1Close:set Ados1=nothing
End Function
' Asp code Created by BlueIdeaCOM Web Team V37 2003-7-25
%>
代码解释:
Responsebuffer=true
NumCode
Function NumCode()
ResponseExpires = -1
ResponseAddHeader "Pragma","no-cache"
ResponseAddHeader "cache-ctrol","no-cache"
dim zNum,i,j
dim Ados,Ados1
Randomize timer
生成随机四位数字:
zNum = cint(8999Rnd+1000)
传递给session
Session("GetCode") = zNum
该for循环是将随机数字放入一个下标3的数组,便于提供给后面的阵列变换
dim zimg(3),NStr
NStr=cstr(zNum)
For i=0 to 3
zimg(i)=cint(mid(NStr,i+1,1))
Next
dim Pos
'定义二个 ADODBStream binary对象,作图像数据操作之用:
set Ados=ServerCreateObject("AdodbStream")
AdosMode=3
AdosType=1
AdosOpen
set Ados1=ServerCreateObject("AdodbStream")
Ados1Mode=3
Ados1Type=1
Ados1Open
'载入0~9的数字数据10x100的,Gbr的阵列数据,每个320字节,10个数字3200byte
'BGR一个点,10x10个点一个数字,一个点三个字节(二进制8位,16进制 00~FF)
'一行10个点 30字节 + 行结束标记 00 00 二字节 32字节,所以一个10x100宽小于长的图像每个数字10x10是320字节
'长大于宽的则无行结束标记 0000,直接是300字节
这些就是BMP 24bit的数据详细信息了
‘至于头部,也很简单,包含长宽,图像开始标记等等~~才54字节,远没jpg什么的复杂
AdosLoadFromFile(Servermappath("bodyFix"))
Ados1write Adosread(1280)
'第一个for循环,按生成的随机数字顺序从 10X100的数字阵列中提取出相应的四个数字
但是竖排的数字阵列
for i=0 to 3
AdosPosition=(9-zimg(i))320
Ados1Position=i320
Ados1write adosread(320)
next
'清空已经用完的ADOS的数据,调入替换新的图像头54字节的头文件
AdosLoadFromFile(Servermappath("headfix"))
Pos=lenb(Adosread())
AdosPosition=Pos '指定Pos位置,即可再偏移54字节的位置添加图形数据
第二个for循环,进行数字的阵列变换,由竖排的块转换为横排的数字块
方法是隔320字节抽取4次30字节写入ados对象,再抽取偏移第二行的图像数据
30字节是因为bmp 宽大于长时无00 00的行结束标记
for i=0 to 9 step 1
for j=0 to 3
Ados1Position=i32+j320
AdosPosition=Pos+30j+i120
Adoswrite ados1read(30)
next
next
AdosPosition=0
responseBinaryWrite直接向客户端发送图像数据
ResponseContentType = "image/BMP"
ResponseBinaryWrite Adosread()
AdosClose:set Ados=nothing
Ados1Close:set Ados1=nothing
End Function
数字和字母组合并生成的验证码祥解
大家经常在网上登陆的时候经常会看到让你输入验证码,有的是文字的,有的呢是,比如chinarencom校友录中留言的时候,我们就会看到数字验证码;网上关于数字文字验证码实现方法的相关资料很多,而我们这里介绍的是数字和字母随机组成的并且生成的验证码的实现方法。看起来很复杂、其实很简单的,大家跟着我往下看:
首先,我们先介绍一下设计思路,数字和字母的随机组合生成验证码,然后将验证码生成,这里“数字和字母的组合”应该是随机取出来的;如果是专门的数字验证码,我们可以这样实现:
ycodenum=4 '验证码的位数,或者说成个数
for i=1 to ycodenum
Randomize '初始化随机数发生器
ycode=ycode&Int((9Rnd)) 'rnd是随机数,从0到1之间的任意实数,这里获得0到9之间的整数
next
responsewrite ycode '就可以输出数字验证码(4位)
然而,我们要让数字和字母同样随机生成,这里我们可以用到数组来实现这种效果,如下:
ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" '将数字和大写字母组成一个字符串
yc=split(char,",") '将字符串生成数组
ycodenum=4
for i=1 to ycodenum
Randomize
ycode=ycode&yc(Int((35Rnd))) '数组一般从0开始读取,所以这里为35Rnd
next
responsewrite ycode
现在看看输出结果是不是数字和字母随机组合的呢?
下面看看怎样生成,这个也许有些朋友知道:asp不能生成,必须使用asp组件。不错,我们这里使用的是ASP图象组件shotgraph。有一点大家注意,服务器不是自己的不能用哦,因为你装不了这组件。
组件的下载地址:http://wwwcsdncomcn/download/ShotGraphrar,至于怎么注册,这里就不多说了,网上有很多资料
我们看看生成的代码:
ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" '将数字和大写字母组成一个字符串
yc=split(char,",") '将字符串生成数组
ycodenum=4
for i=1 to ycodenum
Randomize
ycode=ycode&yc(Int((35Rnd))) '数组一般从0开始读取,所以这里为35Rnd
next
ResponseClear
ResponseContentType="image/gif"
set obj=ServerCreateObject("shotgraphimage")
x=55 '的宽
y=26 '的高
objCreateImage x,y,8 '8是的颜色8位
objSetColor 0,55,126,222
objSetColor 1,255,255,255
objCreatePen "PS_SOLID",1,0
objSetBgColor 0
objRectangle 0,0,x-1,y-1
objSetBkMode "TRANSPARENT"
objCreateFont "Arial",136,18,1,False,False,False,False
objSetTextColor 1
objTextOut 5,4,ycode&" "
img=objGifImage(-1,1,"")
ResponseBinaryWrite (img)
针对以上代码也就是说shotgraph普通的画图的原理请参考:http://wwwpconlinecomcn/pcedu/empolder/wz/asp/10204/45207html
用ASP探针看看服务器有没有支持ADODBStream组件
==========================================
/image/bodyFix,/image/headfix
这两个文件上传了吗?
1 图象绘制完成后,将文件存为24位位图格式的BMP图象文件。
2 去除前54Byte内容
3 改名为BODY+数字FIX
4 修改CHECKCODEASP,调用你新做的这个文件
bodyfix,headfix是什么文件?用什么打开?
就是生成彩色验证码的文件
1、checkcodeASP 负责生成和输出验证码 1309 byte。
2、headfix 是54byte的BMP头
3 、bodyfix 数字0~9 10X100竖排的RGB阵列数据3200 byte
使用ASP生成彩色校验码
49行代码,三个文件
Asp文件:CodeAsp
数据文件:bodyFix , HeadFix
用法:<img src="codeasp">
<%
Option Explicit
Responsebuffer=true
NumCode
Function NumCode()
ResponseExpires = -1
ResponseAddHeader "Pragma","no-cache"
ResponseAddHeader "cache-ctrol","no-cache"
dim zNum,i,j
dim Ados,Ados1
Randomize timer
zNum = cint(8999Rnd+1000)
Session("GetCode") = zNum
dim zimg(4),NStr
NStr=cstr(zNum)
For i=0 to 3
zimg(i)=cint(mid(NStr,i+1,1))
Next
dim Pos
set Ados=ServerCreateObject("AdodbStream")
AdosMode=3
AdosType=1
AdosOpen
set Ados1=ServerCreateObject("AdodbStream")
Ados1Mode=3
Ados1Type=1
Ados1Open
AdosLoadFromFile(Servermappath("bodyFix"))
Ados1write Adosread(1280)
for i=0 to 3
AdosPosition=(9-zimg(i))320
Ados1Position=i320
Ados1write adosread(320)
next
AdosLoadFromFile(Servermappath("headfix"))
Pos=lenb(Adosread())
AdosPosition=Pos
for i=0 to 9 step 1
for j=0 to 3
Ados1Position=i32+j320
AdosPosition=Pos+30j+i120
Adoswrite ados1read(30)
next
next
ResponseContentType = "image/BMP"
AdosPosition=0
ResponseBinaryWrite Adosread()
AdosClose:set Ados=nothing
Ados1Close:set Ados1=nothing
End Function
' Asp code Created by BlueIdeaCOM Web Team V37 2003-7-25
%>
代码解释:
Responsebuffer=true
NumCode
Function NumCode()
ResponseExpires = -1
ResponseAddHeader "Pragma","no-cache"
ResponseAddHeader "cache-ctrol","no-cache"
dim zNum,i,j
dim Ados,Ados1
Randomize timer
生成随机四位数字:
zNum = cint(8999Rnd+1000)
传递给session
Session("GetCode") = zNum
该for循环是将随机数字放入一个下标3的数组,便于提供给后面的阵列变换
dim zimg(3),NStr
NStr=cstr(zNum)
For i=0 to 3
zimg(i)=cint(mid(NStr,i+1,1))
Next
dim Pos
'定义二个 ADODBStream binary对象,作图像数据操作之用:
set Ados=ServerCreateObject("AdodbStream")
AdosMode=3
AdosType=1
AdosOpen
set Ados1=ServerCreateObject("AdodbStream")
Ados1Mode=3
Ados1Type=1
Ados1Open
'载入0~9的数字数据10x100的,Gbr的阵列数据,每个320字节,10个数字3200byte
'BGR一个点,10x10个点一个数字,一个点三个字节(二进制8位,16进制 00~FF)
'一行10个点 30字节 + 行结束标记 00 00 二字节 32字节,所以一个10x100宽小于长的图像每个数字10x10是320字节
'长大于宽的则无行结束标记 0000,直接是300字节
这些就是BMP 24bit的数据详细信息了
‘至于头部,也很简单,包含长宽,图像开始标记等等~~才54字节,远没jpg什么的复杂
AdosLoadFromFile(Servermappath("bodyFix"))
Ados1write Adosread(1280)
'第一个for循环,按生成的随机数字顺序从 10X100的数字阵列中提取出相应的四个数字
但是竖排的数字阵列
for i=0 to 3
AdosPosition=(9-zimg(i))320
Ados1Position=i320
Ados1write adosread(320)
next
'清空已经用完的ADOS的数据,调入替换新的图像头54字节的头文件
AdosLoadFromFile(Servermappath("headfix"))
Pos=lenb(Adosread())
AdosPosition=Pos '指定Pos位置,即可再偏移54字节的位置添加图形数据
第二个for循环,进行数字的阵列变换,由竖排的块转换为横排的数字块
方法是隔320字节抽取4次30字节写入ados对象,再抽取偏移第二行的图像数据
30字节是因为bmp 宽大于长时无00 00的行结束标记
for i=0 to 9 step 1
for j=0 to 3
Ados1Position=i32+j320
AdosPosition=Pos+30j+i120
Adoswrite ados1read(30)
next
next
AdosPosition=0
responseBinaryWrite直接向客户端发送图像数据
ResponseContentType = "image/BMP"
ResponseBinaryWrite Adosread()
AdosClose:set Ados=nothing
Ados1Close:set Ados1=nothing
End Function
数字和字母组合并生成的验证码祥解
大家经常在网上登陆的时候经常会看到让你输入验证码,有的是文字的,有的呢是,比如chinarencom校友录中留言的时候,我们就会看到数字验证码;网上关于数字文字验证码实现方法的相关资料很多,而我们这里介绍的是数字和字母随机组成的并且生成的验证码的实现方法。看起来很复杂、其实很简单的,大家跟着我往下看:
首先,我们先介绍一下设计思路,数字和字母的随机组合生成验证码,然后将验证码生成,这里“数字和字母的组合”应该是随机取出来的;如果是专门的数字验证码,我们可以这样实现:
ycodenum=4 '验证码的位数,或者说成个数
for i=1 to ycodenum
Randomize '初始化随机数发生器
ycode=ycode&Int((9Rnd)) 'rnd是随机数,从0到1之间的任意实数,这里获得0到9之间的整数
next
responsewrite ycode '就可以输出数字验证码(4位)
然而,我们要让数字和字母同样随机生成,这里我们可以用到数组来实现这种效果,如下:
ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" '将数字和大写字母组成一个字符串
yc=split(char,",") '将字符串生成数组
ycodenum=4
for i=1 to ycodenum
Randomize
ycode=ycode&yc(Int((35Rnd))) '数组一般从0开始读取,所以这里为35Rnd
next
responsewrite ycode
现在看看输出结果是不是数字和字母随机组合的呢?
下面看看怎样生成,这个也许有些朋友知道:asp不能生成,必须使用asp组件。不错,我们这里使用的是ASP图象组件shotgraph。有一点大家注意,服务器不是自己的不能用哦,因为你装不了这组件。
组件的下载地址:http://wwwcsdncomcn/download/ShotGraphrar,至于怎么注册,这里就不多说了,网上有很多资料
我们看看生成的代码:
ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" '将数字和大写字母组成一个字符串
yc=split(char,",") '将字符串生成数组
ycodenum=4
for i=1 to ycodenum
Randomize
ycode=ycode&yc(Int((35Rnd))) '数组一般从0开始读取,所以这里为35Rnd
next
ResponseClear
ResponseContentType="image/gif"
set obj=ServerCreateObject("shotgraphimage")
x=55 '的宽
y=26 '的高
objCreateImage x,y,8 '8是的颜色8位
objSetColor 0,55,126,222
objSetColor 1,255,255,255
objCreatePen "PS_SOLID",1,0
objSetBgColor 0
objRectangle 0,0,x-1,y-1
objSetBkMode "TRANSPARENT"
objCreateFont "Arial",136,18,1,False,False,False,False
objSetTextColor 1
objTextOut 5,4,ycode&" "
img=objGifImage(-1,1,"")
ResponseBinaryWrite (img)
针对以上代码也就是说shotgraph普通的画图的原理请参考:http://wwwpconlinecomcn/pcedu/empolder/wz/asp/10204/45207html
0条评论