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
投稿

猜你喜欢

  • 几个ASP字符串处理函数

    2008-04-23 12:55:00
  • link 和 style 元素在 HTML 文档中的位置

    2008-06-02 13:56:00
  • 妙用Dreamweaver MX共享Word XP文件

    2010-09-05 21:17:00
  • 如何获取机器的网络配置属性?

    2009-11-23 20:44:00
  • 如何制作K线图?

    2010-06-29 17:25:00
  • 导航与搜索合并的可能性

    2009-09-27 12:06:00
  • 对网页切片算法问题的研究

    2008-06-05 12:41:00
  • 微软建议的ASP性能优化28条守则(6)

    2008-02-29 11:43:00
  • 50种方法巧妙优化SQL Server数据库

    2008-12-24 15:49:00
  • SQL Server连接失败错误及解决

    2008-01-28 21:09:00
  • 960 Grid System 基本原理及使用方法

    2009-02-28 13:35:00
  • javascript 获取中文字符串长度

    2009-10-18 12:06:00
  • 《HTML5设计原理》读后随记

    2011-01-25 12:26:00
  • aspJpeg图片水印有杂点的完美解决方法

    2011-02-05 10:55:00
  • 惰性函数定义模式

    2007-09-26 20:56:00
  • 理解HTTP消息头

    2008-12-10 14:06:00
  • ASP使用连接MYSQL数据库全攻略

    2007-09-23 09:06:00
  • 豆瓣的Url结构方式一览

    2010-03-01 12:44:00
  • 面向对象的CSS

    2009-07-03 12:23:00
  • SQL Server实现分布式数据库系统的终极目标

    2010-08-05 14:57:00
  • asp之家 网络编程 m.aspxhome.com