asp制作验证码的方法
作者:亮亮 来源:亮亮的博客 发布时间:2008-05-08 12:50:00
首先你要明白24bit的bmp图片的基本信息:1像素占3个字节,头部占54个字节。
好了,现在开始做验证码了,这里以4位验证码(大小为20(高)*80(宽))为例子讲解。
1.用做图软件做两个图片,分别保存为24bit的bmp,一个是20(高)*80(宽)的图片(yzmTmp.bmp),里面的数字随便,就是做出你要在网页上显示的验证码的样子。
如图:
一个是20(高)*200(宽)的图片(yzm.bmp),里面的数字按1,2,3,4,5,6,7,8,9,0从左到右一次排列,每个数字在20*20的范围中居中放置。
如图:
当然,里面的背景,字体及颜色你自己可随意设置。
2.用16进制编辑器(我用的是winhex)打开yzmTmp.bmp,只保留文件头部,就是把54字节后的所有内容删除。从最后开始删,这样容易保证只留下54字节的头文件。
如图:
右边红色椭圆框显示54 bytes,接着另存为head.fix。
3.剩下的就是代码了
<%
Response.buffer = true
NumCode
Function NumCode()
Response.Expires = -1
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-ctrol","no-cache"
dim zNum,i,j
dim Ados,Ados1
Randomize timer
'生成随机四位数字:
zNum = cint(8999*Rnd+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
'’定义二个 ADODB.Stream binary对象,作图像数据操作之用:
set Ados=Server.CreateObject("Adodb.Stream")
Ados.Mode=3
Ados.Type=1
Ados.Open
set Ados1=Server.CreateObject("Adodb.Stream")
Ados1.Mode=3
Ados1.Type=1
Ados1.Open
Ados.LoadFromFile(Server.mappath("yzm.bmp"))
Ados1.write Ados.read(4800)
for ii=0 to 3
for j=0 to 19
if zimg(ii)=0 then zimg(ii)=10 end if
Ados.position=(zimg(ii)-1)*60+600*j+54
Ados1.write ados.read(60)
next
next
'’清空已经用完的ADOS的数据,调入替换新的图像头54字节的头文件
Ados.LoadFromFile(Server.mappath("head.fix"))
Pos=lenb(Ados.read())
Ados.Position=Pos
Ados1.position=0
Ados.write ados1.read()
Ados.Position=0
'直接向客户端发送图像数据
Response.ContentType = "image/BMP"
Response.BinaryWrite Ados.read()
Ados.Close:set Ados=nothing
Ados1.Close:set Ados1=nothing
End Function
%>
4.在需要显示验证码的地方放如下代码就可以了
<img src="getYzm.asp" width="80" height="20" />
到此验证码就完成了,代码就不用解释了吧,不明白就看看adodb.stream方面的资料,我这只解释一下一些数字怎么来的,就是不明白照这套就可以了:
for ii=0 to 3
for j=0 to 19
if zimg(ii)=0 then zimg(ii)=10 end if
Ados.position=(zimg(ii)-1)*60+600*j+54
Ados1.write ados.read(60)
next
nex
60 一个字节3个像素,每个数字是20×20,60就是指横着的20个像素占60个字节
600 整个图片是200像素宽,600就是指横着的200个像素占600个字节
240 生成的验证码为20×80,240就是指横着的80个像素占240个字节
54自然就是头的大小了。
最后看看演示
有了这个思路你就可以做各种各样的验证码,比如数字和字母验证码,汉字验证码了...不过这部分代码就要好好斟酌修改下了
Randomize timer
'生成随机四位数字:
zNum = cint(8999*Rnd+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
就说到这了,欢迎各位赐教,交流验证码的做法!!
猜你喜欢
- 从信息组织角度来看,段落内行之间的关系要比段落之间的关系低一个级别,所以在呈现上段落之间的“段距”应该大于段落之内的“行距”,如此才能一目了
- 1. 得到安全字符串,在查询中使用,过滤单引号。Function Get_SafeStr(str) &nb
- css的流行导致了标签的流行,很直观,看起来很清爽。流行的一部分,还有很多种功能强大且美观的导航。。。1. Change.org2. N.D
- 我们通常会通过单击按钮的操作,将定义好的内容直接复制到剪贴板对于用户来说点了按钮直接【Ctrl】+【V】就可以了。其实该功能的核心原理就是用
- ie的javascript失效了,不是设置的问题那么就可能是以下几点问题了~安装KAV可能会破坏系统的javascript关联,失javas
- 无论是在小得可怜的免费数据库空间或是大型电子商务网站,合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用MySQL数
- JS提供两个截取字符串的方法,分别是:slice()和substring()slice和substring都可以接受一个或两个参数,第1个参
- 方法一:<script language="JavaScript"> <!--
- 在大型商业应用中,数据的异地容灾备份十分重要,也必不可少。笔者根据自己的实践经验,设计了一套简洁地实现异地数据自动备份的方法,可供数据库管理
- 对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散。很容易学习,并
- 这几天无聊的很看着china.nba.com焦点图效果捣鼓了一下有待完善!兼容性:IE6 , IE7 &nb
- javascript编写的窗口代码,可以关闭显示窗口,可以最小化或还原窗口大小,还可以鼠标移动窗口,不错的一个功能。截图如下:<htm
- 环境准备好了!我们怎么使用这些东东?IIS用组件初始化是用这个过程Public Sub OnStartPage给个使用asp组件的例子:数字
- 作业备份,不是备份数据库,是备份作业。 我的方法是把作业导出成文件备份起来,因为当你服务器维护的多了的时候很多你的作业 就很成问题,很麻烦。
- 1.文本框只能输入数字代码(小数点也不能输入)<input onkeyup="this.value=this.va
- 看新闻说Chrome的Javascript引擎很强大,执行速度很快。就随便写了一个1,000,000次的累加放到IE和Chrome下测试,效
- 数据库:30万条,有ID列但无主键,在要搜索的“分类”字段上建有非聚集索引过程T-SQL: /* 用户自定义函数:执行时间在115
- 后台数据库用是Access,客户用了一年后说打开界面非常慢,查看了数据库后发现数据表中的记录已有五万多条,自己试过将记录复制到10 万条,打
- 今天看看那些知名的Logo,可能你没注意过,它们也是一直在变化,有的还挺雷人的!先从时尚的苹果开始吧,苹果也有土的时候。1976年那第一个L
- MySQL使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前Unix用