日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ASP验证码源代码

發布時間:2025/3/21 编程问答 94 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP验证码源代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<%
'------------------
'圖片驗證碼
'netdust
'05-8-29 發布
'以前的圖片驗證碼很容易被破解,所以在其基礎上進行改進,即使知道源代碼
'也很難破解。
'干擾次數每加一??->??窮舉法的代價提高約100*100倍
'適當設定雜點幾率可以有效降低軟件識別正確率
'05-12-20 修正了一個錯誤
'------------------

Option Explicit

Call Com_CreatValidCode("GetCode")

Rem 生成驗證碼圖片
Sub Com_CreatValidCode(pSN)
? ? ? ? Const codeLen = 4? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '驗證碼位數
? ? ? ? Const cOdds = 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '雜點出現的機率
? ? ? ? Const dbtTimes = 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '干擾次數(安全考慮,最好不要小于3)

? ? ? ? Const cAmount = 10 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '字庫數量
? ? ? ? Const cCode = "0123456789"? ? ? ? '字庫對應的字符
? ? ? ? Const UnitWidth = 16? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '字寬(要為4的倍數)
? ? ? ? Const UnitHeight = 13? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '字高
? ? ? ? Const DotsLimit = 5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '每次刪除有效點的上限(避免無法人為識別)
? ? ? ? Const tryCount = 5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '避免刪除有效點超過上限的嘗試次數限制

? ? ? ? '-----------

? ? ? ? Randomize
? ? ? ? Dim i, ii, iii

? ? ? ? ' 禁止緩存
? ? ? ? Response.Expires = -9999
? ? ? ? Response.AddHeader "Pragma","no-cache"
? ? ? ? Response.AddHeader "cache-ctrol","no-cache"
? ? ? ? Response.ContentType = "Image/BMP"

? ? ? ? ' 顏色的數?字符,背景)
? ? ? ? Dim vColorData(1)
? ? ? ? vColorData(0) = ChrB(0) & ChrB(0) & ChrB(0)??' 藍0,綠0,紅0(黑色)
? ? ? ? vColorData(1) = ChrB(255) & ChrB(255) & ChrB(255) ' 藍250,綠236,紅211(淺藍色)

? ? ? ? ' 字符的數據(可以自己修改,如果修改了尺寸,記得把前面的設定也改了)
? ? ? ? Dim vNumberData(9)
? ? ? ? vNumberData(0) = "1111000000001111111000000000011111100111111001111110011111100111111001111110011111100111111001111110011111100111111001111110011111100111111001111110011111100111111001111110011111100000000001111111000000001111"
? ? ? ? vNumberData(1) = "1111110001111111111100000111111111100000011111111100110001111111111111000111111111111100011111111111110001111111111111000111111111111100011111111111110001111111111111000111111111100000000011111110000000001111"
? ? ? ? vNumberData(2) = "1111110000011111111110000000111111110001110011111110001111001111111111111001111111111111001111111111111001111111111111001111111111111001111111111111001111001111111001111100111111100000000011111110000000001111"
? ? ? ? vNumberData(3) = "1111100000011111111100000000111111100111111001111110011111001111111111111001111111111110001111111111111000111111111111111001111111111111110011111110011111100111111001111110011111110000000011111111100000011111"
? ? ? ? vNumberData(4) = "1111111100111111111110110011111111110011001111111111001100111111111001110011111111001111001111111000000000000011100000000000001111111111001111111111111100111111111111110011111111111111001111111111111100111111"
? ? ? ? vNumberData(5) = "1110000000000111110011111111111111001111111111111100111111111111110011111111111111001100000011111100000111100111111111111110011111111111111001111111111111100111110011111110011111001111111001111110000000001111"
? ? ? ? vNumberData(6) = "1111110000011111111110000000111111110011111001111110011111111111111001111111111111100100000111111110000000001111111000111110011111100111111001111110011111100111111001111110011111110000000011111111100000011111"
? ? ? ? vNumberData(7) = "1110000000000111111000000000011111100111111001111110011111100111111111111100111111111111110011111111111110011111111111110011111111111111001111111111111100111111111111110011111111111111001111111111111100111111"
? ? ? ? vNumberData(8) = "1111100000011111111100000000111111100111111001111110011111100111111001111110011111110000000011111111000000001111111100111100111111100111111001111110011111100111111001111110011111110000000011111111100000011111"
? ? ? ? vNumberData(9) = "1111100000011111111100000000111111100111111001111110011111100111111001111110011111110000000001111111000000100111111111111110011111111111111001111111111111100111111001111100111111110000000011111111100000011111"

? ? ? ? ' 隨機產生字符
? ? ? ? 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

Rem 對單個字的點陣進行干擾
Rem 干擾思想:在點陣范圍內隨機產生2個端點,進行連線,以位移較大的一方做橫軸,先將連線上的點刪除,再將被刪除點的縱軸方向上方或下方的點(隨機確定)移向被刪除點,移動后的空白用背景色補充
Function pcd_doubter(ByVal 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)
? ? ? ? ? ? ? ? ? ? ? ? yOffSet = Abs(y2-y1)
? ? ? ? ? ? ? ? ? ? ? ? If xOffSet >= yOffSet Then? ? ? ? '以位移量較大方做橫軸
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? direction = "x"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ReDim ary(xOffSet)? ? ? ? '用來記錄連線各點y值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 'x2,y2存儲x值較大的點
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? If x2 < x1 Then
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i = x1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x1 = x2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x2 = i
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i = y1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? y1 = y2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? y2 = i
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '判斷從x1->x2在縱軸方向上是增是減
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? If y2 >= y1 Then
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? flag = 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? flag = -1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '下面計算連線上點的分布(先是平均分配各行的點,然后隨機分配剩余的點到各行)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? rows = yOffSet + 1? ? ? ? '所占行數
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? step = (xOffSet+1) / rows? ? ? ? '各行平均分配的點
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? yu = (xOffSet+1) Mod rows? ? ? ? '剩余的點數
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ReDim ary2(rows-1)? ? ? ? '用來記錄剩余點的隨機分配
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? While yu > 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i = int(Rnd*rows)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ary2(i) = ary2(i)&"."? ? ? ? ? ? ? ? '被分配到的行則加一個字符"."
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? yu = yu - 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WEnd
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iii = 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '將連線的點信息記錄到數組
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For i=0 To rows-1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For ii=1 To step+Len(ary2(i))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ary(iii) = y1 + i*flag
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iii = iii + 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ii = 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '統計連線上有效點的數量
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For i=0 To xOffSet
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? If pcd_getDot(x1+i,ary(i),str,UnitWidth) = "0" Then ii = ii + 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? Else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '這里是以y為橫軸,原理與x時相同
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? direction = "y"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ReDim ary(yOffSet)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? If y2 < y1 Then
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i = x1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x1 = x2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x2 = i
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i = y1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? y1 = y2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? y2 = i
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? If x2 >= x1 Then
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? flag = 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? flag = -1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? rows = xOffSet + 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? step = (yOffSet+1) / rows
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? yu = (yOffSet+1) Mod rows
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ReDim ary2(rows-1)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? While yu > 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i = int(Rnd*10)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? If i < rows Then
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ary2(i) = ary2(i)&"."
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? yu = yu - 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WEnd
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iii = 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For i=0 To rows-1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For ii=1 To step+Len(ary2(i))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ary(iii) = x1 + i*flag
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iii = iii + 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ii = 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For i=0 To yOffSet
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? If pcd_getDot(ary(i),y1+i,str,UnitWidth) = "0" Then ii = ii + 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ? ? ? ? ? ? '如未超過有效點上限則跳出循環,執行干擾
? ? ? ? ? ? ? ? ? ? ? ? If ii <= DotsLimit Then Exit For
? ? ? ? ? ? ? ? Next

? ? ? ? ? ? ? ? If direction = "x" Then
? ? ? ? ? ? ? ? ? ? ? ? '隨機確定在縱軸方向上或下進行移動
? ? ? ? ? ? ? ? ? ? ? ? If int(Rnd*10) > 4 Then
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '變量連線上的點
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For i=0 To xOffSet
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '遍歷移動
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For ii=ary(i) To 1 Step -1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Call pcd_setDot(x1+i,ii,str,pcd_getDot(x1+i,ii-1,str,UnitWidth),UnitWidth)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '添補空白
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Call pcd_setDot(x1+i,0,str,"1",UnitWidth)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? Else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For i=0 To xOffSet
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For ii=ary(i) To UnitHeight-2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Call pcd_setDot(x1+i,ii,str,pcd_getDot(x1+i,ii+1,str,UnitWidth),UnitWidth)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Call pcd_setDot(x1+i,UnitHeight-1,str,"1",UnitWidth)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ? ? Else
? ? ? ? ? ? ? ? ? ? ? ? If int(Rnd*10) > 4 Then
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For i=0 To yOffSet
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For ii=ary(i) To 1 Step -1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Call pcd_setDot(ii,y1+i,str,pcd_getDot(ii-1,y1+i,str,UnitWidth),UnitWidth)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Call pcd_setDot(0,y1+i,str,"1",UnitWidth)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? Else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For i=0 To yOffSet
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? For ii=ary(i) To UnitWidth-2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Call pcd_setDot(ii,y1+i,str,pcd_getDot(ii+1,y1+i,str,UnitWidth),UnitWidth)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Call pcd_setDot(UnitWidth-1,y1+i,str,"1",UnitWidth)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Next
? ? ? ? ? ? ? ? ? ? ? ? End If
? ? ? ? ? ? ? ? End If
? ? ? ? Next
? ? ? ? pcd_doubter = str
End Function

Rem 得到某點的字符
Function pcd_getDot(x,y,str,UnitWidth)
? ? ? ? pcd_getDot = Mid(str,x+1+y*UnitWidth,1)
End Function

Rem 設置某點的字符
Sub pcd_setDot(x,y,ByRef str,newDot,UnitWidth)
? ? ? ? str = Left(str,x+y*UnitWidth) & newDot & Right(str,Len(str)-x-y*UnitWidth-1)
End Sub

Rem 將數字轉為bmp需要的格式 lens是目標字節長度
Function Num2ChrB(num,lens)
? ? ? ? Dim ret,i
? ? ? ? ret = ""
? ? ? ? While (num>0)
? ? ? ? ? ? ? ? ret = ret & ChrB(num mod 256)
? ? ? ? ? ? ? ? num = num / 256
? ? ? ? WEnd
? ? ? ? For i=Lenb(ret) To lens-1
? ? ? ? ? ? ? ? ret = ret & chrB(0)
? ? ? ? Next
? ? ? ? Num2ChrB = ret
End Function
%>


保存為code.asp

使用

<img src="code.asp" style="cursor:hand" id="code" οnclick="document.getElementById('code').src='../inc/code.asp?pp='+ Math.random();" alt="看不清?點一下" />

驗證函數

CODE: ? ???Function codepass()
? ?? ???Dim CodeStr
? ?? ???CodeStr = Trim(request("CodeStr"))
? ?? ???If CStr(Session("GetCode")) = CStr(CodeStr) And CodeStr <> "" Then
? ?? ?? ?? ?codepass = True
? ?? ?? ?? ?'Session("GetCode")=empty
? ?? ???Else
? ?? ?? ?? ?codepass = False
? ?? ?? ?? ?'Session("GetCode")=empty
? ?? ???End If
? ? End Function
在服務器端驗證的時候 <%If Trim(Request.Form("validate_code"))=Empty Or Trim(Session("getCode")) <>Trim(Request.Form("validate_code")) Then
response.write(" <script? language=javascript>alert('請注意正確輸入驗證碼');Javascript:window.history.go(-1); </script>")

response.end
end if%>

<%
Option Explicit
Response.buffer = True
NumCode (8)?? '注:1,4,7,10,13,16為彩色背景型 2,5,8,11,14,17為黑白型 3,6,9,12,15,18為噪點型
Function NumCode(CodeType)
??? Response.Expires = -1
??? Response.AddHeader "Pragma", "no-cache"
??? Response.AddHeader "cache-ctrol", "no-cache"
??? On Error Resume Next
??? Dim zNum, rNum, i, j, listnum, listcode
??? Dim Ados, Ados1
??? listcode = "0123456789abcdefghijklmnopqrstuvwxyz"
??? Randomize Timer
??? Dim zimg(6), NStr
??? For i = 0 To 5
??????? rNum = CStr(CInt(35 * Rnd)) '將35改為9即為使用純數字密碼
??????? zimg(i) = rNum
??????? listnum = listnum & Mid(listcode, rNum + 1, 1)
??? Next
??? Session("CheckCode") = listnum
??? Dim Pos
??? 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("../images/body" & CodeType & ".Fix"))
??? Ados1.write Ados.read(2880)
??? For i = 0 To 5
??????? Ados.Position = (35 - zimg(i)) * 480
??????? Ados1.Position = i * 480
??????? Ados1.write Ados.read(480)
??? Next
??? Ados.LoadFromFile (Server.mappath("../images/head.fix"))
??? Pos = LenB(Ados.read())
??? Ados.Position = Pos
??? For i = 0 To 15 Step 1
??????? For j = 0 To 5
??????????? Ados1.Position = i * 32 + j * 480
??????????? Ados.Position = Pos + 30 * j + i * 270
??????????? Ados.write Ados1.read(30)
??????? Next
??? Next
??? Response.ContentType = "image/BMP"
??? Ados.Position = 0
??? Response.BinaryWrite Ados.read()
??? Ados.Close: Set Ados = Nothing
??? Ados1.Close: Set Ados1 = Nothing
??? 'If Err Then Session("CheckCode") = "999999"
End Function
%>

總結

以上是生活随笔為你收集整理的ASP验证码源代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。