asp中文数字验证码

来源:互联网 发布:淘宝店铺首页宝贝推荐 编辑:程序博客网 时间:2024/06/06 12:36
<%Response.buffer=trueNumCodeFunction 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'载入0~9的数字数据10x100的,Gbr的阵列数据,每个320字节,10个数字3200byte'BGR一个点,10x10个点一个数字,一个点三个字节(二进制8位,16进制 00~FF)'一行10个点 30字节 + 行结束标记 00 00 二字节 32字节,所以一个10x100宽小于长的图像每个数字10x10是320字节'长大于宽的则无行结束标记 0000,直接是300字节这些就是BMP 24bit的数据详细信息了‘至于头部,也很简单,包含长宽,图像开始标记等等~~才54字节,远没jpg什么的复杂              Ados.LoadFromFile(Server.mappath("body.Fix"))              Ados1.write Ados.read(1280)'第一个for循环,按生成的随机数字顺序从 10X100的数字阵列中提取出相应的四个数字但是竖排的数字阵列              for i=0 to 3                     Ados.Position=(9-zimg(i))*320                     Ados1.Position=i*320                     Ados1.write ados.read(320)              next'清空已经用完的ADOS的数据,调入替换新的图像头54字节的头文件                     Ados.LoadFromFile(Server.mappath("head.fix"))              Pos=lenb(Ados.read())              Ados.Position=Pos '指定Pos位置,即可再偏移54字节的位置添加图形数据第二个for循环,进行数字的阵列变换,由竖排的块转换为横排的数字块方法是隔320字节抽取4次30字节写入ados对象,再抽取偏移第二行的图像数据30字节是因为bmp 宽大于长时无00 00的行结束标记              for i=0 to 9 step 1                     for j=0 to 3                            Ados1.Position=i*32+j*320                            Ados.Position=Pos+30*j+i*120                            Ados.write ados1.read(30)                     next              next              Ados.Position=0response.BinaryWrite直接向客户端发送图像数据              Response.ContentType = "image/BMP"              Response.BinaryWrite Ados.read()              Ados.Close:set Ados=nothing              Ados1.Close:set Ados1=nothingEnd Function%>
<%c = Request.form("c")'如果可以输入小写的数字,请把下面三行注释掉 for ii = 0 to 9 c = Replace(c,Cstr(ii),"") next c = Replace(c,"零","0") c = Replace(c,"一","1") c = Replace(c,"二","2") c = Replace(c,"三","3") c = Replace(c,"四","4") c = Replace(c,"五","5") c = Replace(c,"六","6") c = Replace(c,"七","7") c = Replace(c,"八","8") c = Replace(c,"九","9")if Cstr(c) <> Cstr(Session("validateCode")) then Response.write ("验证码不正确")else '这里处理表单end if%>
原创粉丝点击