asp

位置:IT落伍者 >> asp >> 浏览文章

ASP生成图片彩色校验码


发布日期:2018年02月16日
 
ASP生成图片彩色校验码

行代码三个文件

Asp文件CodeAsp

数据文件bodyFix HeadFix

用法<img src="codeasp">

<%Option ExplicitResponsebuffer=trueNumCodeFunction NumCode() ResponseExpires = ResponseAddHeader "Pragma""nocache" ResponseAddHeader "cachectrol""nocache" dim zNumij dim AdosAdos Randomize timer zNum = cint(*Rnd+) Session("GetCode") = zNum dim zimg()NStr NStr=cstr(zNum) For i= to zimg(i)=cint(mid(NStri+)) Next dim Pos set Ados=ServerCreateObject("AdodbStream") AdosMode= AdosType= AdosOpen set Ados=ServerCreateObject("AdodbStream") AdosMode= AdosType= AdosOpen AdosLoadFromFile(Servermappath("bodyFix")) Adoswrite Adosread() for i= to AdosPosition=(zimg(i))* AdosPosition=i* Adoswrite adosread() next AdosLoadFromFile(Servermappath("headfix")) Pos=lenb(Adosread()) AdosPosition=Pos for i= to step for j= to AdosPosition=i*+j* AdosPosition=Pos+*j+i* Adoswrite adosread() next next ResponseContentType = "image/BMP" AdosPosition= ResponseBinaryWrite Adosread() AdosClose:set Ados=nothing AdosClose:set Ados=nothingEnd Function Asp code Created by BlueIdeaCOM Web Team V %>

代码解释:

Responsebuffer=true
NumCode
Function NumCode()
ResponseExpires =
ResponseAddHeader "Pragma""nocache"
ResponseAddHeader "cachectrol""nocache"
dim zNumij
dim AdosAdos
Randomize timer

生成随机四位数字

zNum = cint(*Rnd+)

传递给session

Session("GetCode") = zNum

该for循环是将随机数字放入一个下标的数组便于提供给后面的阵列变换

dim zimg()NStr
NStr=cstr(zNum)
For i= to
zimg(i)=cint(mid(NStri+))
Next
dim Pos

定义二个 ADODBStream binary对象作图像数据操作之用:

set Ados=ServerCreateObject("AdodbStream")
AdosMode=
AdosType=
AdosOpen
set Ados=ServerCreateObject("AdodbStream")
AdosMode=
AdosType=
AdosOpen

载入~的数字数据xGbr的阵列数据每个字节个数字byte

BGR一个点x个点一个数字一个点三个字节(二进制进制 ~FF)

一行个点 字节 + 行结束标记 二字节 字节所以一个x宽小于长的图像每个数字x字节

长大于宽的则无行结束标记 直接是字节

这些就是BMP bit的数据详细信息了

‘至于头部也很简单包含长宽图像开始标记等等~~才字节远没jpg什么的复杂

AdosLoadFromFile(Servermappath("bodyFix"))
Adoswrite Adosread()

第一个for循环按生成的随机数字顺序从 X的数字阵列中提取出相应的四个数字

但是竖排的数字阵列

for i= to
AdosPosition=(zimg(i))*
AdosPosition=i*
Adoswrite adosread()
next

清空已经用完的ADOS的数据调入替换新的图像头字节的头文件

AdosLoadFromFile(Servermappath("headfix"))
Pos=lenb(Adosread())
AdosPosition=Pos

指定Pos位置即可再偏移字节的位置添加图形数据

第二个for循环进行数字的阵列变换由竖排的块转换为横排的数字块

方法是隔字节抽取字节写入ados对象再抽取偏移第二行的图像数据

字节是因为bmp 宽大于长时无 的行结束标记

以下为引用的内容
for i= to step
for j= to
AdosPosition=i*+j*
AdosPosition=Pos+*j+i*
Adoswrite adosread()
next
next
AdosPosition=
responseBinaryWrite直接向客户端发送图像数据
ResponseContentType = "image/BMP"
ResponseBinaryWrite Adosread()
AdosClose:set Ados=nothing
AdosClose:set Ados=nothing
End Function

上一篇:asp 显示目录所有文件

下一篇:在ASP中访问和更新Cookies集合