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

就说到这了,欢迎各位赐教,交流验证码的做法!!

标签:验证码,asp
0
投稿

猜你喜欢

  • go 分布式锁简单实现实例详解

    2024-02-13 06:50:28
  • 深入解析Vue源码实例挂载与编译流程实现思路详解

    2024-05-11 09:11:41
  • 微信小程序学习笔记之本地数据缓存功能详解

    2024-04-22 12:42:49
  • 不要用强制方法杀掉python线程

    2021-04-10 09:19:18
  • 如何用python开发Zeroc Ice应用

    2022-06-23 01:17:50
  • springboot多数据源配合docker部署mysql主从实现读写分离效果

    2024-01-28 11:14:53
  • Django3基于WebSocket实现WebShell的详细过程

    2021-12-01 21:34:31
  • PyCharm配置mongo插件的方法

    2023-08-16 19:37:05
  • 卸载VS2011 Developer Preview后Sql Server2008 R2建立数据库关系图报“找不到指定的模块”错误的解决方法

    2011-11-03 16:49:09
  • Mysql权限管理grant命令使笔记

    2024-01-18 02:08:28
  • 通过实例解析python描述符原理作用

    2021-01-15 03:14:57
  • SQL Server 2005 五个动态管理对象

    2008-12-18 14:50:00
  • python3让print输出不换行的方法

    2021-02-16 20:48:33
  • 微信小程序前端自定义分享的实现方法

    2024-05-02 16:13:35
  • Python OpenCV基于HSV的颜色分割实现示例

    2021-11-04 19:24:26
  • python实现LRU热点缓存及原理

    2022-01-08 01:26:15
  • HTTP 错误 500.100 - 内部服务器错误 - ASP 错误

    2008-09-12 13:07:00
  • Python3.7 新特性之dataclass装饰器

    2021-05-11 13:13:40
  • 教你如何使用Conda命令 + 安装tensorflow

    2021-09-17 22:32:07
  • pandas数据清洗实现删除的项目实践

    2021-09-02 16:44:17
  • asp之家 网络编程 m.aspxhome.com