asp汉字中文图片验证码的实现代码(23)





' 随机产生字符 
Dim vCodes 
ReDim vCode(codeLen-1) 
For i = 0 To codeLen-1 
vCode(i) = Int(Rnd * cAmount) 
vCodes = vCodes & Mid(cCode, vCode(i) + 1, 1) 
vCode(i) = pcd_doubter(vNumberData(vCode(i)),UnitWidth,UnitHeight,DotsLimit,tryCount,dbtTimes) 
Next 
Session("psn") = vCodes '///////////记录入Session 
' 输出图像文件头 
Response.BinaryWrite ChrB(66) & ChrB(77) & Num2ChrB(54+UnitWidth*UnitHeight*CodeLen*3,4) & ChrB(0) & ChrB(0) &_ 
ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) &_ 
ChrB(0) & ChrB(0) & Num2ChrB(UnitWidth*CodeLen,4) & Num2ChrB(UnitHeight,4) &_ 
ChrB(1) & ChrB(0) 

' 输出图像信息头 
Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & Num2ChrB(UnitWidth*UnitHeight*CodeLen*3,4) &_ 
ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) &_ 
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_ 
ChrB(0) & ChrB(0) 

For i = UnitHeight-1 To 0 Step -1 ' 历经所有行 
For ii = 0 To codeLen-1 ' 历经所有字 
For iii = 1 To UnitWidth ' 历经所有像素 
If Rnd * 99 + 1 >= cOdds Then' 逐行、逐字、逐像素地输出图像数据 
Response.BinaryWrite vColorData(Mid(vCode(ii), i * UnitWidth + iii, 1)) 
Else ' 随机生成杂点 
Response.BinaryWrite vColorData(1-CInt(Mid(vCode(ii), i * UnitWidth + iii, 1))) 
End If 
Next 
Next 
Next 
End Sub 

Function pcd_doubter(str,UnitWidth,UnitHeight,DotsLimit,tryCount,dbtTimes) 
Randomize 
Dim x1,x2,y1,y2,xOffSet,yOffSet,direction,flag,rows,step,yu,yuStr,i,ii,iii,f1,f2 
For f1=1 To dbtTimes'干扰次数 
For f2=1 To tryCount'避免删除有效点超过上限的尝试次数限制 
'随机确定2个端点 
x1 = int(Rnd*UnitWidth) 
x2 = int(Rnd*UnitWidth) 
y1 = int(Rnd*UnitHeight) 
y2 = int(Rnd*UnitHeight) 
'x,y位移量 
xOffSet = Abs(x2-x1) 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2584.html