flymorn改进一下以上的新意,直接把3+6=多少的形式采用asp程序生成bmp图片格式,并且把数字相加后的和存进session里,加大破解的门槛;没有一些图形图像学知识的人是无法破解的。代码如下:
复制代码 代码如下:
<%
response.buffer = true
response.expiresabsolute = now() - 1
response.expires = 0
response.cachecontrol = "no-cache"
response.contenttype = "image/bmp"
call com_creatvalidcode()
sub com_creatvalidcode()
randomize
dim i, ii, iii
const camount = 10 '数值个数
const ccode = "0123456789" '数值范围
dim vcolordata(2)
vcolordata(0) = "" '黑色点要转为彩色点,暂时不定义
vcolordata(1) = chrb(255) & chrb(255) & chrb(255) '白点
dim vcode(4), vcodes '产生一组任意数
for i = 0 to 3
vcode(i) = int(rnd * camount) '数组等于总数*随机数
if i=1 then vcode(i)="11" '第二位为+
if i=3 then vcode(i)="10" '第四位为=
vcodes=vcodes&mid(ccode,vcode(i)+1,1) '串等于串加上后续值
next
session("checkcode")=int(mid(vcodes,1,1)) + int(mid(vcodes,2,1)) '计算相加和值并赋值给session
dim vnumberdata(36)
vnumberdata(0) =
"1110000111110111101111011110111101111011110111101111011110111101111011110111101111011110111110000111"
vnumberdata(1) =
"1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111"
vnumberdata(2) =
"1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011"
vnumberdata(3) =
"1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111"
vnumberdata(4) =
"1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011"
vnumberdata(5) =
"1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111"
vnumberdata(6) =
"1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111"
vnumberdata(7) =
"1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111"
vnumberdata(8) =
"1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111"
vnumberdata(9) =
"1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111"
'表示=
vnumberdata(10) =
"1111111111111111111111111111111000000001111111111111111111111000000001111111111111111111111111111111"
'表示+
vnumberdata(11) =
"1111111111111100111111110011111111001111100000000110000000011111001111111100111111110011111111111111"
response.binarywrite chrb(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.binarywrite chrb(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)
for i = 9 to 0 step -1 '行
for ii = 0 to 3 '字数
for iii = 1 to 10 '像素点
if mid(vnumberdata(vcode(ii)), i * 10 + iii , 1) ="0" then '产生彩色点,减去一个固定值,可使颜色偏深
dim a,b,c
a=abs(rnd * 256-60)
b=abs(rnd * 256-128)
c=abs(rnd * 256-60)
vcolordata(0) = chrb(a) & chrb(b) & chrb(c)
response.binarywrite vcolordata(mid(vnumberdata(vcode(ii)), i * 10 + iii , 1))
else
dim d,e,f '产生彩色背景,颜色偏浅,也可以随机生成噪点做背景
d=abs(rnd * 255)
e=abs(rnd * 255)
f=abs(rnd * 255)
if d+e+f>640 then '可改值,调整背景色深
vcolordata(1) = chrb(d) & chrb(e) & chrb(f)
response.binarywrite vcolordata(mid(vnumberdata(vcode(ii)), i * 10 + iii , 1))
else
response.binarywrite vcolordata(mid(vnumberdata(vcode(ii)), i * 10 + iii , 1))
end if
end if
next
next
next
end sub
%>
以上代码可直接另存为一个文件,如vcode.asp,然后通过图片的方式调用改文件,如<img src="vcode.asp" border=0 align="absmiddle" />,然后在提交后的处理页面里验证session("checkcode")的值就可以了。这个代码是flymorn自己改进的,原始的参考代码请直接在google里搜索“用asp生成bmp图片”,或查看这个网址,可以找到一些相关的。
最后,就是“5+6=”这样的随机数字相加的形式生成在bmp图片里了,它们的和需要你计算后填入,以达到验证的功能,防止机器蹂躏你的网站。如果你也关心asp图片验证码,欢迎留言,让我们一起交流。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!