帮朋友加ASP留言板验证功能的代码.

ContractedBlock.gif ExpandedBlockStart.gif v.asp
  
  
<%   
  Class   Com_GifCode_Class   
  
'''''''''''''''''''''''''''''''''''''''''''''   
  '   Author:   Layen   support@ssaw.net   84815733(QQ)   
  '   Thanks:   Laomi,   Laomiao,   NetRube   
  '   2006-01-02   
  '''''''''''''''''''''''''''''''''''''''''''''   
  Public   Noisy,   Count,   Width,   Height,   Angle,   Offset,   Border   
    
  
Private   Graph(),   Margin(3)   
    
  
Private   Sub   Class_Initialize()   
  
Randomize   
  Noisy   
=   8   '   干扰点出现的概率   
  Count   =   6   '   字符数量   
  Width   =   80   '   图片宽度   
  Height   =   30   '   图片高度   
  Angle   =   2   '   角度随机变化量   
  Offset   =   20   '   偏移随机变化量   
  Border   =   1   '   边框大小   
  End   Sub   
    
  
Public   Function   Create()   
    
  
Const   cCharSet   =   "123456789"   
    
  
Dim   i,   x,   y   
    
  
Dim   vValidCode   :   vValidCode   =   ""   
  
Dim   vIndex   
    
  
ReDim   Graph(Width-1,   Height-1)   
    
  
For   i   =   0   To   Count   -   1   
  vIndex   
=   Int(Rnd   *   Len(cCharSet))   
  vValidCode   
=   vValidCode   +   Mid(cCharSet,   vIndex+1   ,   1)   
  SetDraw   vIndex,   i   
  
Next   
    
  Create   
=   vValidCode   
    
  
End   Function   
    
  
Sub   SetDot(pX,   pY)   
  
If   pX   *   (Width-pX-1)   >=   0   And   pY   *   (Height-pY-1)   >=   0   Then   
  Graph(pX,   pY)   
=   1   
  
End   If   
  
End   Sub   
    
  
Public   Sub   SetDraw(pIndex,   pNumber)   
    
  
'   字符数据   
  Dim   DotData(8)   
  DotData(
0)   =   Array(30,   15,   50,   1,   50,   100)   
  DotData(
1)   =   Array(1   ,34   ,30   ,1   ,71,   1,   100,   34,   1,   100,   93,   100,   100,   86)   
  DotData(
2)   =   Array(1,   1,   100,   1,   42,   42,   100,   70,   50,   100,   1,   70)   
  DotData(
3)   =   Array(100,   73,   6,   73,   75,   6,   75,   100)   
  DotData(
4)   =   Array(100,   1,   1,   1,   1,   50,   50,   35,   100,   55,   100,   80,   50,   100,   1,   95)   
  DotData(
5)   =   Array(100,   20,   70,   1,   20,   1,   1,   30,   1,   80,   30,   100,   70,   100,   100,   80,   100,   60,   70,   50,   30,   50,   1,   60)   
  DotData(
6)   =   Array(6,   26,   6,   6,   100,   6,   53,   100)   
  DotData(
7)   =   Array(100,   30,   100,   20,   70,   1,   30,   1,   1,   20,   1,   30,   100,   70,   100,   80,   70,   100,   30,   100,   1,   80,   1,   70,   100,   30)   
  DotData(
8)   =   Array(1,   80,   30,   100,   80,   100,   100,   70,   100,   20,   70,   1,   30,   1,   1,   20,   1,   40,   30,   50,   70,   50,   100,   40)   
    
  
Dim   vExtent   :   vExtent   =   Width   /   Count   
  Margin(
0)   =   Border   +   vExtent   *   (Rnd   *   Offset)   /   100   +   Margin(1)   
  Margin(
1)   =   vExtent   *   (pNumber   +   1)   -   Border   -   vExtent   *   (Rnd   *   Offset)   /   100   
  Margin(
2)   =   Border   +   Height   *   (Rnd   *   Offset)   /   100   
  Margin(
3)   =   Height   -   Border   -   Height   *   (Rnd   *   Offset)   /   100   
    
  
Dim   vStartX,   vEndX,   vStartY,   vEndY   
  
Dim   vWidth,   vHeight,   vDX,   vDY,   vDeltaT   
    
  
Dim   vAngle,   vLength   
    
  vWidth   
=   Int(Margin(1)   -   Margin(0))   
    
  vHeight   
=   Int(Margin(3)   -   Margin(2))   
    
  
'   起始坐标   
  vStartX   =   Int((DotData(pIndex)(0)-1)   *   vWidth   /   100)   
    
  vStartY   
=   Int((DotData(pIndex)(1)-1)   *   vHeight   /   100)   
    
  
Dim   i,   j   
  
For   i   =   1   To   UBound(DotData(pIndex),   1)/2   
    
  
If   DotData(pIndex)(2*i-2)   <>   0   And   DotData(pIndex)(2*i)   <>   0   Then   
    
  
'   终点坐标   
  vEndX   =   (DotData(pIndex)(2*i)-1)   *   vWidth   /   100   
    
  vEndY   
=   (DotData(pIndex)(2*i+1)-1)   *   vHeight   /   100   
    
  
'   横向差距   
  vDX   =   vEndX   -   vStartX   
  
'   纵向差距   
  vDY   =   vEndY   -   vStartY   
    
  
'   倾斜角度   
  If   vDX   =   0   Then   
  vAngle   
=   Sgn(vDY)   *   3.14/2   
  
Else   
  vAngle   
=   Atn(vDY   /   vDX)   
  
End   If   
    
  
'   两坐标距离   
  If   Sin(vAngle)   =   0   Then   
  vLength   
=   vDX   
  
Else   
  vLength   
=   vDY   /   Sin(vAngle)   
  
End   If   
    
  
'   随机转动角度   
  vAngle   =   vAngle   +   (Rnd   -   0.5)   *   2   *   Angle   *   3.14   *   2   /   100   
    
  vDX   
=   Int(Cos(vAngle)   *   vLength)   
    
  vDY   
=   Int(Sin(vAngle)   *   vLength)   
    
  
If   Abs(vDX)   >   Abs(vDY)   Then   vDeltaT   =   Abs(vDX)   Else   vDeltaT   =   Abs(vDY)   
    
  
For   j   =   1   To   vDeltaT   
  SetDot   Margin(
0)   +   vStartX   +   j   *   vDX   /   vDeltaT,   Margin(2)   +   vStartY   +   j   *   vDY   /   vDeltaT   
  
Next   
    
  vStartX   
=   vStartX   +   vDX   
    
  vStartY   
=   vStartY   +   vDY   
  
End   If   
  
Next   
  
End   Sub   
    
  
Public   Sub   Output()   
    
  Response.Expires   
=   -9999   
  Response.ExpiresAbsolute 
= Now() - 1  
  Response.AddHeader   
"pragma",   "no-cache"   
  Response.AddHeader   
"cache-ctrol",   "no-cache"   
  Response.ContentType   
=   "image/gif"   
    
  
'   文件类型   
  Response.BinaryWrite   ChrB(Asc("G"))   &   ChrB(Asc("I"))   &   ChrB(Asc("F"))   
  
'   版本信息   
  Response.BinaryWrite   ChrB(Asc("8"))   &   ChrB(Asc("9"))   &   ChrB(Asc("a"))   
  
'   逻辑屏幕宽度   
  Response.BinaryWrite   ChrB(Width   Mod   256)   &   ChrB((Width   \   256)   Mod   256)   
  
'   逻辑屏幕高度   
  Response.BinaryWrite   ChrB(Height   Mod   256)   &   ChrB((Height   \   256)   Mod   256)   
    
  Response.BinaryWrite   ChrB(
128)   &   ChrB(0)   &   ChrB(0)   
  
'   全局颜色列表   
  Response.BinaryWrite   ChrB(255)   &   ChrB(255)   &   ChrB(255)   
    
  Response.BinaryWrite   ChrB(
0)   &   ChrB(85)   &   ChrB(255)   
    
  
'   图象标识符   
  Response.BinaryWrite   ChrB(Asc(","))   
    
  Response.BinaryWrite   ChrB(
0)   &   ChrB(0)   &   ChrB(0)   &   ChrB(0)   
  
'   图象宽度   
  Response.BinaryWrite   ChrB(Width   Mod   256)   &   ChrB((Width   \   256)   Mod   256)   
  
'   图象高度   
  Response.BinaryWrite   ChrB(Height   Mod   256)   &   ChrB((Height   \   256)   Mod   256)   
    
  Response.BinaryWrite   ChrB(
0)   &   ChrB(7)   &   ChrB(255)   
    
  
Dim   x,   y,   i   :   i   =   0   
  
For   y   =   0   To   Height   -   1   
  
For   x   =   0   To   Width   -   1   
  
If   Rnd   <   Noisy   /   100   Then   
  Response.BinaryWrite   ChrB(
1-Graph(x,   y))   
  
Else   
  
If   x   *   (x-Width)   =   0   Or   y   *   (y-Height)   =   0   Then   
  Response.BinaryWrite   ChrB(Graph(x,   y))   
  
Else   
  
If   Graph(x-1,   y)   =   1   Or   Graph(x,   y)   Or   Graph(x,   y-1)   =   1   Then   
  Response.BinaryWrite   ChrB(
1)   
  
Else   
  Response.BinaryWrite   ChrB(
0)   
  
End   If   
  
End   If   
  
End   If   
  
If   (y   *   Width   +   x   +   1)   Mod   126   =   0   Then   
  Response.BinaryWrite   ChrB(
128)   
  i   
=   i   +   1   
  
End   If   
  
If   (y   *   Width   +   x   +   i   +   1)   Mod   255   =   0   Then   
  
If   (Width*Height   -   y   *   Width   -   x   -   1)   >   255   Then   
  Response.BinaryWrite   ChrB(
255)   
  
Else   
  Response.BinaryWrite   ChrB(Width   
*   Height   Mod   255)   
  
End   If   
  
End   If   
  
Next   
  
Next   
  Response.BinaryWrite   ChrB(
128)   &   ChrB(0)   &   ChrB(129)   &   ChrB(0)   &   ChrB(59)   
  
End   Sub   
  
End   Class   
    
  
Dim   mCode   
  
Set   mCode   =   New   Com_GifCode_Class   
  Session(
"GetCode")   =   mCode.Create()   
  mCode.Output()   
  
Set   mCode   =   Nothing   
  %
>   
  
ContractedBlock.gif ExpandedBlockStart.gif 1.htm
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store">

<META HTTP-EQUIV="Expires" CONTENT="0">
</HEAD>
<form id="test" action="1.asp" method="post">
<input type="test" name="v"/><img id="vImg" src="v.asp" alt="看不清?点击更换" onclick="this.src='v.asp?'+Math.random()">
<href="#" onclick="document.getElementById('vImg').src='v.asp?'+Math.random();"> 看不清,换一张 </a>
<input type="submit"/>
</form>
ContractedBlock.gif ExpandedBlockStart.gif 1.asp
  <%
  VailCode   
=   trim(Request.Form("v")) 
  
if VailCode<>Session("GetCode"then
      response.write 
"failing"

else
    response.write 
"Success"

end if
response.write 
"<br>"+VailCode+"<br>"+Session("GetCode")
  %
>

转载于:https://www.cnblogs.com/tonyepaper/archive/2008/12/07/1349508.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该压缩包为 imgchk 文件夹 ,其中有三个文件:validatecode.asp,validatebody.fix,validatehead.fix   主要即是为生成 验证码 服务的。   将解压文件夹直接释放在需要在某页添验证码的同目录下,(比如 addnew.asp 需要添验证码,该文件在 cnbruce 文件夹下,则将 imgchk 文件夹同时释放到 cnbruce 文件夹 中)   2、添显示验证码和输入框   在需要添验证码的页面中添如下代码: <input name='validatecode' type='text' size='5'> <img src='imgchk/validatecode.asp' align='absmiddle' border='0'>   3、记录接受页面处理   在步骤2中,一定会将记录提交到某个页面处理,那么在该处理页中添如下代码: If Trim(Request.Form("validatecode"))=Empty Or Trim(Session("cnbruce.com_ValidateCode"))<>Trim(Request.Form("validatecode")) Then response.write("请注意正确输入验证码") response.end end if   验证码原理:   在生成验证码图片的时候,同时生成了一个Session,其值就是验证码图片中的数字值。   同时,提供输入框让用户输入,提交输入值后,与已有的Session值进行比较,根据判断结果做相应判断。   如果需要修改Session的name,只有两个地方改动:   a:您下载的imgchk文件夹中的validatecode.asp,其中涉及到cnbruce.com的该成您的;   b:就是刚才的步骤 3中Trim(Session("cnbruce.com_ValidateCode"))<>Trim(Request.Form("validatecode")) 中的cnbruce.com换成a所设定的。   另外===================================================   显示校验码的补丁(有些朋友显示不出验证码,这里看看)   用下面内容创建文件SP2.reg(用记事本就可以,保存时选“另存为”) Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Security] "BlockXBM"=dword:00000000   双击导入注册表中,然后重启机器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值