用ASP生成XBM数字图片(可用来生成验证码)

xbm|验证码

XBM图片是一个纯文本的文件,可以用ASP来自动生成。可以用它来使用网站登陆的验证码;
我们用记事本打开该文件进行分析:
其文件结构为:
#define counter_width 48
#define counter_height 9
static unsigned char counter_bits[]={7c,3c,7c,3c,70,3c,fe,7c,fe,7c,78,7c,ee,ee,ee,ee,7c,ee,e0,ee,60,ee,74,ee,70,fe,30,fe,70,fe,38,ec,e0,ec,70,ec,1c,e0,ee,e0,70,e0,fe,7e,fe,7e,70,7e,fe,3c,7c,3c,70,3c}
文件扩展名为:.xbm

#define counter_width 48 '这儿定义的是图片的宽度,一般为8的倍数
#define counter_height 9 '这儿定义的是图片的高度,是任意的。
static unsigned char counter_bits[]={7c,3c,7c,3c,70,3c,fe,7c,fe,7c,78,7c,ee,ee,ee,ee,7c,ee,e0,ee,60,ee,74,ee,70,fe,30,fe,70,fe,38,ec,e0,ec,70,ec,1c,e0,ee,e0,70,e0,fe,7e,fe,7e,70,7e,fe,3c,7c,3c,70,3c} '这儿是图片用来显示内容的十六进制的代码

正如static unsigned char英文意思为静态的,无符号的,烧焦的。它只能用来显示黑白两种颜色。二进制中的1将来用显示为黑色,0为白色。

下面为0~9数字的二进制数组(其中的图片样式仅试用于本例。如果需要别的0~9数字样式,请另自行生成)

'此处声明0~9绘图用数组

dim num(9,8)
'数字0
num(0,0)="0x38"
num(0,1)="0x7c"
num(0,2)="0xee"
num(0,3)="0xee"
num(0,4)="0xee"
num(0,5)="0xee"
num(0,6)="0xee"
num(0,7)="0x7c"
num(0,8)="0x38"
'数字1
num(1,0)="0x70"
num(1,1)="0x78"
num(1,2)="0x7c"
num(1,3)="0x74"
num(1,4)="0x70"
num(1,5)="0x70"
num(1,6)="0x70"
num(1,7)="0x70"
num(1,8)="0x70"
'数字2
num(2,0)="0x7c"
num(2,1)="0xfe"
num(2,2)="0xee"
num(2,3)="0xe0"
num(2,4)="0x70"
num(2,5)="0x38"
num(2,6)="0x1c"
num(2,7)="0xfe"
num(2,8)="0xfe"
'数字3
num(3,0)="0x7c"
num(3,1)="0xfe"
num(3,2)="0xee"
num(3,3)="0x60"
num(3,4)="0x30"
num(3,5)="0xe0"
num(3,6)="0xee"
num(3,7)="0xfe"
num(3,8)="0x7c"
'数字4
num(4,0)="0x70"
num(4,1)="0x78"
num(4,2)="0x7c"
num(4,3)="0x76"
num(4,4)="0x77"
num(4,5)="0xff"
num(4,6)="0xff"
num(4,7)="0x70"
num(4,8)="0x70"
'数字5
num(5,0)="0xfc"
num(5,1)="0xfc"
num(5,2)="0x0c"
num(5,3)="0x7e"
num(5,4)="0xfe"
num(5,5)="0xe0"
num(5,6)="0xee"
num(5,7)="0xfe"
num(5,8)="0x7c"
'数字6
num(6,0)="0x78"
num(6,1)="0xfc"
num(6,2)="0x0e"
num(6,3)="0x6e"
num(6,4)="0xfe"
num(6,5)="0xee"
num(6,6)="0xee"
num(6,7)="0xfc"
num(6,8)="0x78"
'数字7
num(7,0)="0xfe"
num(7,1)="0xfe"
num(7,2)="0x60"
num(7,3)="0x70"
num(7,4)="0x38"
num(7,5)="0x38"
num(7,6)="0x18"
num(7,7)="0x1c"
num(7,8)="0x1c"
'数字8
num(8,0)="0x7c"
num(8,1)="0xfe"
num(8,2)="0xee"
num(8,3)="0x7c"
num(8,4)="0x7c"
num(8,5)="0xee"
num(8,6)="0xee"
num(8,7)="0xfe "
num(8,8)="0x7c"
'数字9
num(9,0)="0x3c"
num(9,1)="0x7c"
num(9,2)="0xee"
num(9,3)="0xee"
num(9,4)="0xfe"
num(9,5)="0xec"
num(9,6)="0xe0"
num(9,7)="0x7e"
num(9,8)="0x3c"

下面实现这个的代码,把上面的数字数组(红色的)保存为funNum.asp
下面的文件部分,单独保存为一个ASP页
<%
response.Buffer=true
response.ExpiresAbsolute=now()-1
response.expires=0
response.CacheControl="no-cache"
%>
<!--#include file="funNum.asp"-->
<!--funNum.asp就是教程里那几个数组//-->
<%
const countHeight=9 '图片的高度
const countlength=6 '图片里数字的位数
const numBinBit=8 '这是数字数组里的二进制位数,好象只能使用八位以下的即11111111
const countWidth=48 'countlength*numBinBit得到
const imgtype="image/x-xbitmap"
dim countBody '图片信息
dim tmpcountbody '用于存放后面生成的图片数据
tmpcountbody=""
countBody="#define js_counter_width " & countWidth & vbCrLf
countBody=countBody & "#define js_counter_height " & countHeight & vbCrLf
countBody=countBody & "static unsigned char js_counter_bits[]={" & vbCrLf
dim numid '需要生成图片的数字
dim numarray() '将取得的numid分割成一个个的数字组成一维数组
numid="369245" '编写一个函数用来生成数字即可
if len(numid)<countLength then
for i=1 to countLength-len(numid)
numid="0" & numid
next
end if
redim numarray(len(numid)-1) '直接定义数组时要指字一整型数值,重定义数组大小时可使用表达式
for i=0 to ubound(numarray,1)
numarray(i)=mid(numid,i+1,1)
next
for i=0 to countHeight-1
for j=0 to countlength-1
tmpcountbody=tmpcountbody & num(numarray(j),i) & ","
next
next
tmpcountbody=left(tmpcountbody,len(tmpcountbody)-1)
countBody=countBody & tmpcountbody & "}"
response.contenttype=imgtype
response.write countBody
%>

时间: 2024-09-01 09:10:44

用ASP生成XBM数字图片(可用来生成验证码)的相关文章

用ASP生成XBM数字图片

xbm XBM图片是一个纯文本的文件,可以用ASP来自动生成.可以用它来使用网站登陆的验证码:我们用记事本打开该文件进行分析:其文件结构为:#define counter_width 48#define counter_height 9static unsigned char counter_bits[]={7c,3c,7c,3c,70,3c,fe,7c,fe,7c,78,7c,ee,ee,ee,ee,7c,ee,e0,ee,60,ee,74,ee,70,fe,30,fe,70,fe,38,ec

asp.net首页登陆图片设计,切割后的图片不能完整显示,有裂缝

问题描述 在设计首页图片时候,先用photoshop将图片切割,生成html文件.之后导入Dreamweaver中,再将生成的代码复制到asp.net中,做适当的修改,生成首页登陆图片.但是生成的图片之间有裂缝,已经做过适当调整,还是对不齐...这是为什么该怎么改?谢谢! 解决方案 解决方案二:http://topic.csdn.net/u/20080731/10/d700bd4b-4f6c-4686-aa1f-fbeebd912e82.html解决方案三:先谢谢楼上的我接下来还有问题:当没添加

php生成唯一数字id的方法汇总_php技巧

关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢? 当然不是,其实有两种方法可以解决. 1. 如果你只用php而不用数据库的话,那时间戳+随机数是最好的方法,且不重复: 2. 如果需要使用数据库,即你还需要给这个id关联一些其他的数据.那就给MySQL数据库中的表的id一个AUTO_INCREMENT(自增)属性,每次插入一条数据时,id自动+1,然后使用mysql_insert_id()或LAST_INS

asp.net做个批量生成html的网站,生成静态页图片翻页怎么做啊?index_1.html,index_2.html 这样子 上一页1 2 3 4 5下一页

问题描述 asp.net做个批量生成html的网站,生成静态页图片翻页怎么做啊index_1.html,index_2.html这样子上一页12345下一页或者上一页下拉列表(可以选择页)下一页各们大哥怎么实现??是个图片站index_1.html,index_2.html,index_3.html,index_4.html每个页不同的图片.请教... 解决方案 解决方案二:分页我一般还是用动态分页,然后重写url为.htm解决方案三:分页在生成时就应该把相应的页面链接写进去阿:分页其实比较难以

asp.net动态生成竖向流程图片

问题描述 asp.net动态生成竖向流程图片 解决方案 解决方案二:虽然你表达不清楚虽然你字数精简虽然你有太多的太多我只能说..flash和SL貌似可以实现你的需求解决方案三:什么意思能不能不太明白,能不能帮个忙做个demo给小弟参考一下

可用的ASP无重复数字随机函数, 数组实现, 并应用于随机显示记录集

经脚本之家站长测试可用的ASP无重复数字随机函数, 数组实现, 并应用于随机显示记录集 作用: 本函数适用于随机显示小数量的随机不重复数字 本函数适用于显示小数量的随机不重复记录集 为了不影响效率, 上限超过一千, 不建议使用本函数 shawl.qiu 2006-09-06  http://blog.csdn.net/btbtd 主内容: 函数及应用函数随机显示100条记录 linenum  复制代码 代码如下: <%       dim rs, rNum       dim temp     

asp实现生成由数字,大写字母,小写字母指定位数的随机数_应用技巧

<% '****************************** '函数:gen_key(digits) '参数:digits----要生成随机数的位数 '作者:阿里西西 '日期:2007/7/13 '描述:生成由数字,大写字母,小写字母指定位数的随机数:返回值:要生成的指定倍数的随机数 '示例:<%=gen_key(8)%> '****************************** Function gen_key(digits) '定义并初始化数组     dim char

CssGaga教程:生成DataURI,抽取图片,下载远程css文件,图片无损压缩

文章简介:CssGaga教程:生成DataURI,抽取图片,下载远程css文件,图片无损压缩. CssGaga – 生成dataURI和MHTML Before: .base64{background-image:url('base64/logo.png');} .base64{border-image:url('base64/logo.png');} 注:要转换的图片文件所在base64文件夹与css同级且引用时为相对路径 After: .base64{background-image:url

ASP 中利用OWC 服务器端组件动态生成图表

动态|服务器|图表 引:Web程序开发中,经常需要从数据库表文件中提取数据,并对大批量的数据进行分析比较,此时最常用也是最直观明了的表现方法莫过于绘制图表. ASP擅长服务器端的Web编程,操作后台数据库更是它的强项.但是用ASP制作实时数据库图表有点困难,因为ASP本身并不支持图表功能,只能借助第三方控件进行开发,如VB的MSChart 控件.而微软推出的实时数据库图表制作组件-- O W C(Microsoft Office Web Components),为在Web中绘制图形提供了灵活的同