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,http://zzdxjyzd.comdirection,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)

转载于:https://www.cnblogs.com/dakunqq/p/11287225.html

验证码ASP源代码 ASP页面中生成图片验证码,需要用到System.Drawing命名空间下的很多类,首先我们需要新建一个CreateImage.aspx页面,在后台代码中定义用于生成验证码图片的方法,如下:{{//产生4位验证码//用于验证}////// 产生验证码/////////{i++){//一个大于或等于minValue 且小于maxValue 的32 位带符号整数,即:返回的值范围包括minValue 但不包括maxValue。如果。 阅读详情

相关推荐

ASP.NET验证码图片生成器源代码

图像转换技术是验证码生成中不可或缺的一环,它涉及到位图和矢量图的概念以及图像压缩技术,这些技术对验证码的生成和用户体验都有着直接的影响。

weixin_34598113的博客 947

20多种ASP验证码分析程序源码

【程序老媛出品,必属精品,亲测校正,质量保证】 资源名:20多种ASP验证码分析程序源码 资源类型:程序源代码 源码说明: 20多种ASP验证码 代码完美分析 适合人群:新手及有一定经验的开发人员

asp验证码-带刷新-最简洁的验证码代码

asp验证码,带刷新,代码简洁 验证源码只有55行,超简洁 引用方式: 验证码: 判断页面: <% if trim(session("validateCode")) trim(Request("txt_check")) then ErrorMessage = "请输入正确的验证码" response.write(" alert('"&ErrorMessage&"');location.href='Default.asp' ") response.end end if %>

VC++结合ASP通过网络进行软件注册认证

内容索引:VC/C++源码,网络相关,网络认证  VC++结合ASP通过网络进行软件注册认证,也就是软件注册功能的网络实现,需要部分ASP代码的配合,VC++编写窗体程序向ASP发送数据,然后由ASP接受后判断是否正确,再返回给VC++窗体,整个过程就是这样的,里面用到一些类,说明一下,如果一个运行在 Windows XP 上的应用程序清单指定要使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,则需要 InitCommonControls()。否则,将无法创建窗口。由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,而不是启动应用程序的消息泵。

怎样生成带有随机杂点的ASP数字以及字母验证码

一般来说生成验证码方式比较多,一般有数字字母形式、纯数字形式、纯字母形式等等,之前有朋友咨询过关于如何生产带有随机杂点的验证码?   今天知码网就为大家分享一下,如何使用ASP的方式生产数字字母的随机杂点验证码。 Option Explicit Response.Buffer = True Response.Expires = -1 session.TimeOut=60 Call

知码的世界 624

asp验证码代码 (带刷新)

将以下代码放到一个单独的页面checkcode.asp Option Explicit Response.buffer=true Call Com_CreatValidCode("validateCode") Sub Com_CreatValidCode(pSN) ' 禁止缓存 Response.Expires = -9999 Response.AddHeader "Prag

feiyafei2008的专栏 956

我的一个Asp.Net验证码源代码

验证码可以有效地防止黑客对网页的攻击,现在公布一个我常用的验证码源代码, 使用方法:   1、在Web项目中添加一个类,如“CreateImage.cs”,然后将我公布的源代码Copy进去;   2、再新建一个Web窗体,如“Image.aspx”,在Page_Load中加入代码 “CreateImage.DrawImage ();”当然别忘了加上对类的引用哦!!   3、在页面的合适位置上(你...

weixin_30549175的博客 199

ASP中使用的生成图片验证码源代码

Dim DEF_MasterCookies, DEF_BBS_HomeUrlDim RndNumber,RndNumberStr,N,RsDEF_MasterCookies = ""DEF_BBS_HomeUrl     = "../"Response.Expires = 0      过期时间RandomizeSession("CheckCode") =    Fix(rnd*100

672

asp验证码源码程序

asp验证码源码,包含前台调用演示 生成的验证码图片较复杂,可直接做实际应用。 应用实例:http://www.symental.com/demo/liuxue/register.htm

26种ASP验证码代码

总共26种ASP验证码的代码,后台登陆、 会员登陆等需要验证码时可使用. 各种样式,数字,中文。亲测可用

ASP验证码源码完整版

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机和人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),我们利用比较简易的方式实现了这个功能。 图片验证码 'netdust '05-8-29 发布 '以前的图片验证码很容易被破解,所以在其基础上进行改进,即使知道源代码 '也很难破解。 '干扰次数每加一 -> 穷举法的代价提高约100*100倍 '适当设定杂点几率可以有效降低软件识别正确率 '05-12-20 修正了一个错误

ASP网络验证系统源码-易语言

注:本资源不含易语言源码,需要自行根据系统的接口编写! 运行环境:IIS+Access 后台地址:http://您的域名/Admin/Admin_Login.asp 默认管理帐号:admin 密码:123456789 文件结构 根目录 Pay_Save.asp生成订单并提交 loginout.asp退出登陆 Index.asp首页 文件夹:Admin Admin_Login.asp管理登陆页面 Admin_Config.asp后台首页 Admin_Index.asp后台首页 Admin_Left.asp后台左边功能列表 Admin_Info.asp网站基本信息设置 loginout.asp管理退出 Admin_Info_Save.asp网站基本信息保存 Admin_Pw.asp管理密码修改 Admin_Pw_Save.asp管理密码修改保存 Admin_User_List.asp用户列表 Admin_User_Edit_save.asp用户修改保存 Admin_User_Edit.asp用户修改 Admin_User_Add.asp增加用户 Admin_Card_Edit.asp充值卡功能提交页 Admin_Card_Make.asp充值卡生成页面 Admin_Card_list.asp充值卡列表页 Admin_Online_List.asp在线列表管理页面 Admin_Order_Info.asp订单显示 Admin_Order_Edit.asp订单管理 Admin_Ip_Info.asp封IP显示 Admin_Ip_Edit.asp封IP管理 文件夹:Inc Conn.asp数据库连接 Md5.aspMD5加密 Function.asp功能页 Top.asp网站头文件 Bottom.asp网站底部文件 Post.asp注册什么的功能页 Config.asp网站配置信息 Time.asp时间页面 文件夹:Get YzGet.aspGET方式提交验证 CzGet.aspGET方式充值页面 RegGet.aspGET方式提交注册 GbGet.aspGET方式提交改绑 PwGet.aspGET方式修改密码 Get.aspGET方式定时验证(软件定时访问此页面) 文件夹:Post YzPost.aspPOST方式提交验证 CzPost.aspPOST方式充值页面 RegPost.aspPOST方式提交注册 GbPost.aspPOST方式提交改绑 PwPost.aspPOST方式修改密码 Post.aspPOST方式定时验证(软件定时访问此页面) 文件夹:pay在线直冲,支付宝接口文件

ASP.NET验证码源代码

 //生成验证码源代码using System;using System.Data;using System.Drawing;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.

每天进步一点点 2206

ASP.NET生成验证码源代码

本文介绍的ASP.NET生成验证码代码,来源于eping的博客,挺简单,内容细节都说得很清楚,实现方法下文using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web...

weixin_30278237的博客 142
上一篇: AngularJS引入Echarts的Demo
下一篇: Vue系列:通过vue-router如何传递参数
bangzhou5573
博客等级 码龄10年 61粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值