逐梦论坛's Archiver

shillan 发表于 2011-5-28 20:02

古诗验证码(ASP)

xxx.asp ——这是需要验证的页面,比如在这里用户填写自己的注册资料或者内容等等[code]<%
Function answer_re(k_answer)   '这个函数将??符号转换为可供填写的文本框
                               '该段函数可以嵌入在ASP程序任何位置
     if k_answer<>"" then
     k_answer=replace(k_answer,"??","<input type='text' size='1' maxlength='1' name='k_session' />")
     end if
answer_re=k_answer
End Function

Sub check_theom    '主过程
                   '该段过程可以嵌入在ASP程序任何位置
     Dim num,k,k_session,k_answer
     randomize
     num=cint(rnd*3)  '3为验证诗句的总数,自定义了多少题目,就写上相应的数字
     if num=0 then    '容错
           num=num+1
     end if

     Select Case num
     Case 1
     k="野火烧不尽"         '提示题目,可以自行修改提问
     k_answer="春风??又生"  '用??代替需要用户填写的文本框
     k_session="吹"         '正确答案

     Case 2
     k="床前明月光"
     k_answer="疑是??上霜"
     k_session="地"

     Case 3
     k="不识庐山真面目"
     k_answer="只??身在此山中"
     k_session="缘"

     [COLOR=blue]'Case n...  按照上段的格式,你也可以自己增加题目,使得验证复杂些[/COLOR]

     Case Else               '容错
     k="验证出错"&num:k_answer="验证出错":k_session=""
     End Select

     k_answer=answer_re(k_answer)   '执行转换函数
     session("check_theom")=k_session    '通过session记录正确答案

     With Response     '输出文字和格式到前台
           .Write "<form method='post' name='check_form' action='test.asp'>"  '测试form,实际使用时应去掉
           .Write "验证,请填入汉字使得诗句通顺(输完回车):<br />"&vbCrlf
           .Write k&"<br />"&vbCrlf
           .Write k_answer&vbCrlf
           .Write "</form>"
     End With
End Sub
%>

<%
Call check_theom    '调用主过程,此句放置在需要显示验证码的位置
%> [/code]test.asp ——提交页面,诸如发表文章向数据库写入记录的执行页面[code]<%
Sub Go_History(str1)   '容错过程,出错即返回上一页
                       '此过程可以嵌入ASP程序的任何位置
     Response.Write "<script Language=Javascript>alert('"&str1&"');location.href = 'javascript:history.go(-1)';</script>"
     Response.End
End Sub
%>

<%
'以下语句放置在你认为适当的位置中

Dim k_post
k_post=Trim(Request.Form("k_session"))   '获取用户填写的内容
if k_post<>session("check_theom") or k_post="" then  '与session中存储的正确答案比对
     Go_History("验证码不符!")
end if

Response.Write "验证码正确!"            '此句在测试中使用的,在实际使用中可以删掉
session.abandon     '程序结束时将session释放

'如果其他插件使用了session,建议将session.abandon改为session("check_theom")=Empty
%> [/code]验证的题目不止限于诗句,使用者可发挥主观能动性自行修改~

转自:[url]http://www.leadbbs.com/a/a.asp?B=200&ID=2449170[/url]

shillan 发表于 2011-5-28 20:10

例子(蓝雨程序留言本book.asp)

Sub Add_New()%>
<table width="520" border="0" cellspacing="1" cellpadding="0" align="center"><tr><td>
<table width="450" cellpadding="1" cellspacing="0" align="center" >
<form name="new" method="post" action="book.asp?Add_New_Execute">
<tr>
<td width="80">您的姓名:</td>
<td width="300"><input type="text" name="name" maxlength="255" size="20" class='lanyu'>   <font color=red>*</font></td>
</tr>
[color=Red]<!--添加汉字验证输入框开始-->
<tr>
<td>汉字验证:</td>
<td>
<%
Call check_theom   '调用主过程,此句放置在需要显示验证码的位置
%>
</td>
</tr>
<!--添加汉字验证输入框结束-->[/color]
<tr>
<td>您的性别:</td>
<td><input type="radio" name="SEX" value="0" checked>人妖 <input type="radio" name="SEX" value="1">亚当 <input type="radio" name="SEX" value="2">夏娃</td>
</tr>
<tr>
<td>电子邮箱:</td>
<td><input type="text" name="email" maxlength="255" size="20" class='lanyu'></td>
</tr>
<tr>
<td>腾迅 QQ:</td>
<td><input type="text" name="qq" maxlength="255" size="20" class='lanyu'></td>
</tr>
<tr>
<td>个人主页:</td>
<td><input type="text" name="web" maxlength="255" size="20" class='lanyu'></td>
</tr>
<tr> <td>来自哪里:</td>
<td><input type="text" name="city" maxlength="255" size="20" class='lanyu'></td>
</tr>
<tr><td>类型选择:</td>
<td><input type="radio" name="title" value="1" checked><font color=#0000FF>留言</font> <input type="radio" name="title" value="2"><font color=#FF00FF>建议</font> <input type="radio" name="title" value="3"><font color=#FF7F50>报错</font> <input type="radio" name="title" value="4"><font color=#228B22>连接</font> <input type="radio" name="title" value="5"><font color=#1E90FF>其它</font></td>
</tr>
<tr>
<td valign="middle">留言内容: <br></td>
<td  valign="top"><textarea name="words" cols="40" rows="6" class='lanyu'></textarea></td>
</tr>
<tr>
<td valign="middle">是否隐藏:</td>
<td valign="top">
<input type="radio" name="admin" value="0" checked> 否 <input type="radio" name="admin" value="1"> 是&nbsp;&nbsp;<font color=#009900>*</font> 选择隐藏后,此留言只有管理员可以看到。</td>
</tr><tr>
<td align="center"  height="40" colspan="2">
<input type="hidden" name="action_e" value="Add_New"> <input type="submit"  class='button' name="Submit" value="提交" >
        <input type="reset" name="Submit2" value="重写"  class='button'>
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<% End Sub
----------------------------------------------------------------------------------------------

<%
'添加新留言到数据库
Sub Add_New_Execute()
        If Request.Form("name")="" Then
        Response.Write "<script language=javascript>alert('姓名不能为空!');javascript:history.back();</script>"
        Response.End
        End If
        If Len(Request.Form("name"))>20 Then
        Response.Write "<script language=javascript>alert('姓名不能太长!');javascript:history.back();</script>"
        Response.End
        End If
        If Request.Form("email")<>"" Then
        If instr(Request.Form("email"),"@")=0 or instr(Request.Form("email"),"@")=1 or         instr(Request.Form("email"),"@")=len(email) then
        Response.Write "<script language=javascript>alert('电子信箱格式填写不正确!');javascript:history.back();</script>"
        Response.End
        End If
        End If
        If Request.Form("words")="" Then
        Response.Write "<script language=javascript>alert('留言不能为空!');javascript:history.back();</script>"
        Response.End
        End If
[color=Red]        '添加汉字验证开始
        Dim k_post
        k_post=Trim(Request.Form("k_session"))   '获取用户填写的内容
        if k_post<>session("check_theom") or k_post="" then   '与session中存储的正确答案比对
        Go_History("验证码不符!")
        end if

        'Response.Write "验证码正确!"           '此句在测试中使用的,在实际使用中可以删掉
        session.abandon     '程序结束时将session释放

        '如果其他插件使用了session,建议将session.abandon改为session("check_theom")=Empty
        '添加汉字验证结束[/color]
        Set Rs = Server.CreateObject("ADODB.RecordSet")
        Sql="Select * From words"
        Rs.Open Sql,Conn,2,3
        Rs.AddNew
        Rs("name")=Server.HTMLEncode(Request.Form("name"))
        Rs("sex")=Server.HTMLEncode(Request.Form("sex"))
        Rs("qq")=Server.HTMLEncode(Request.Form("qq"))
        Rs("uc")=Server.HTMLEncode(Request.Form("uc"))
        Rs("city")=Server.HTMLEncode(Request.Form("city"))
        Rs("web")=Server.HTMLEncode(Request.Form("web"))
        Rs("email")=Server.HTMLEncode(Request.Form("email"))
        Rs("admin")=Server.HTMLEncode(Request.Form("admin"))
        Rs("title")=Server.HTMLEncode(Request.Form("title"))
        Rs("words")=Server.HTMLEncode(Request.Form("words"))
        Rs("date")=Now()
        Rs("ip")=request.servervariables("remote_addr")
        Rs.Update
        Rs.Close
        Set Rs = Nothing
Response.write "<script language = 'javascript'>alert('发表成功!');"
Response.write "window.document.location.href='book.asp';</script>"
End Sub
......
%>
----------------------------------------------------------------------------------------------

[color=Red]<!--添加汉字验证开始-->
<%
Function answer_re(k_answer)   '这个函数将??符号转换为可供填写的文本框
                               '该段函数可以嵌入在ASP程序任何位置
     if k_answer<>"" then
     k_answer=replace(k_answer,"??","<input type='text' size='1' maxlength='1' name='k_session' />")
     end if
answer_re=k_answer
End Function

Sub check_theom    '主过程
                   '该段过程可以嵌入在ASP程序任何位置
     Dim num,k,k_session,k_answer
     randomize
     num=cint(rnd*3)  '3为验证诗句的总数,产生随机数字以便抽取题目
     if num=0 then    '容错
           num=num+1
     end if

     Select Case num
     Case 1
     k="野火烧不尽,"         '提示题目,可以自行修改提问
     k_answer="春风??又生。"  '用??代替需要用户填写的文本框
     k_session="吹"         '正确答案

     Case 2
     k="床前明月光,"
     k_answer="疑是??上霜。"
     k_session="地"

     Case 3
     k="不识庐山真面目,"
     k_answer="只??身在此山中。"
     k_session="缘"

     Case Else               '容错
     k="验证出错"&num:k_answer="验证出错":k_session=""
     End Select

     k_answer=answer_re(k_answer)   '执行转换函数
     session("check_theom")=k_session    '通过session记录正确答案

     With Response     '输出文字和格式到前台
           '.Write "<form method='post' name='check_form' action='test.asp'>"  '测试form,实际使用时应去掉
           .Write k&vbCrlf
           .Write k_answer&vbCrlf
           .Write "<br>(验证,请填入汉字使得诗句通顺)"&vbCrlf
           '.Write "</form>"
           .Write "<font color=red>*</font>"
     End With
End Sub

Sub Go_History(str1)   '容错过程,出错即返回上一页
                       '此过程可以嵌入ASP程序的任何位置
     Response.Write "<script Language=Javascript>alert('"&str1&"');location.href = 'javascript:history.go(-1)';</script>"
     Response.End
End Sub
%>
<!--添加汉字验证结束-->[/color]
----------------------------------------------------------------------------------------------

蘑菇花 发表于 2012-1-25 16:58

能发这么好的帖子,太谢谢了

qazwer168 发表于 2012-2-6 13:01

xiexie!!

rjges 发表于 2012-5-9 14:59

谢谢啦,很有用!

www.bestzxw.com 发表于 2012-8-8 10:55

会被破解吗?

www.lctzw.com 发表于 2012-9-1 16:02

谢谢楼主啊,受益匪浅啊!

东步良苦 发表于 2012-10-26 06:23

有空一起交流一下

北纬40ave 发表于 2012-11-5 11:32

选个好的 才有保证 这话没错

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.