内容导航:图片滑动验证码,* 图片验证码,我这里的验证码识别,识别出验证码
{image}
一、图片滑动验证码怎样实现
这次给大家带来图片滑动验证码怎样实现,图片滑动验证码实现的注意事项有哪些 ,下面就是实战案例,一起来看一下。
图片滑动验证码,逻辑是根据鼠标滑动轨迹 ,坐标位置,计算拖动速度等等来判断是否人为操作,当然下面的代码只是实现前端部分 ,只记录了拖动的坐标 。
先上代码吧,做个备份记录
/
Created by lgy on 2017/10/21.
图片验证码
*/
(function ($) {
$. = function (options) {
//初始化参数
var defaults = {
callback:"" //回调函数
};
var opts = $.extend(defaults, options);
return (function () {
var $this = $(this);//获取当前对象
var html = '
' +
'
'
' +
'
' +
'
' +
'
'' +
'
刷新
' +'' +
'
' +
'
'按住滑块,拖动完成上方拼图' +
'';
$(html);
//定义拖动参数
var $pMove = $(this).find(".code-btn-img"); //拖动按钮
var $pWrap = $(this).find(".code-btn");//鼠标可拖拽区域
var mX = 0, mY = 0;//定义鼠标X轴Y轴
var dX = 0, dY = 0;//定义滑动区域左、上位置
var isDown = false;//mousedown标记
if(nt) {//ie的事件监听 ,拖拽p时禁止选中内容,firefox与chrome已在css中设置过圆戚御-moz-user-select: none;
-webkit-user-select: none;
$pMove[0].attachEvent('onselectstart', function() {
return false;
});
}
//按钮拖动事件
$({
mousedown: function (e) {
//清除提示信息
$(".code-tip").html("");
var event = e || ;
mX = ;
dX = $().left;
dY = $().top;
isDown = true;//鼠标拖拽启
$(this).addClass("active");
//修改按钮阴影
$({"box-shadow"仔皮:"0 0 8px #666"});
}
});
//鼠标点击松手事件
$(document).mouseup(function (e) {
var lastX = $(".code-mask").offset().left - dX - 1;
isDown = false;//鼠标拖拽启
$ss("active");
//还原按钮阴影
$({"box-shadow":"0 0 3px #ccc"});
checkcode(lastX);
});
//滑动事件
$(function (event) {
var event = event || ;
var x = ;//鼠标滑动时的X轴
if (isDown) {
if(x>(dX+30) && x<dX+$(this).width()-20){
$({"left": (x - dX - 20) + "px"});//p动态位置赋值
$(".code-mask").css({"left": (x - dX-30) + "px"});
}
}
});
//验证数据
function checkcode(code){
var iscur=false;
//模拟ajax
setTimeout(function(){
if(iscur){
checkcoderesult(1,"验证通过");
$(".code-k-p").hide();
({code:1000,msg:"验证通过",msgcode:"23dfdf123"});
}else{
$("error");
checkcoderesult(0,"验证不通过");
({code:1001,msg:"验证不通过"});
setTimeout(function() {
$ss("error");
$(".code-mask").animate({"left":"0px"},200);
$({"left": "10px"},200);
},400);
}
},500)
}
//验证结果
function checkcoderesult(i,txt){
if(i==0){
$(".code-tip").addClass("code-tip-red");
}else{
$(".code-tip").addClass("code-tip-green");
}
$(".code-tip").html(txt);
}
})
}
})(jQuery);
css部分:
.code_bg{
position: fixed;
top:0;
left: 0;
right:0;
bottom:0;
background-color: rgba(0,0,0,.5);
z-index: 99;
}
.icon-login-bg{
background-image: url(../img/icon/);
background-repeat: no-repeat;
}
.code-con{
position: absolute;
top:100px;
width: 320px;
left: 50%;
margin-left: -160px;
background-color: #fff;
z-index: 100;
-moz-user-select: none;
-webkit-user-select: none;
}
.code-img{
margin: 5px 5px;
padding: 5px 5px;
background-color: #f5f6f7;
}
.code-img img{
display: block;
}
.icon-w-25{
display: inline-block;
width: 25px;
height: 25px;
text-indent: -9999px;
}
.icon-push{
cursor: pointer;
background-position: -149px -95px;
}
.code-push{
height: 25px;
}
.code-btn{
position: relative;
height: 30px;
text-align: center;
color: #999;
margin: 10px 10px;
box-sizing: border-box;
background-color: #f5f6f7;
border-radius: 15px;
border: 1px solid #e1e1e1;
}
.code-btn-m{
position: absolute;
width: 40px;
height: 40px;
border-radius: 50%;
background-color: #f5f6f7;
border: 1px solid #e1e1e1;
z-index: 5;
top:-8px;
left: 10px;
box-shadow: 0 0 3px #ccc;
cursor: pointer;
background-position: -63px 10px;
}
.code-btn-img{
background-image:url(../img/icon/);
background-repeat: no-repeat;
}
.{
background-position: -134px 10px;
}
.{
background-position: 8px 10px;
}
.code-img-con{
position: relative;
}
.code-mask{
position: absolute;
top:0;
left: 0;
z-index: 10;
}
.code-tip{
padding-left: 10px;
font-size: 12px;
color: #999;
}
.code-tip-red{
color: red;
}
.code-tip-green{
color: green;
}
html部分:
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
开源JS插件框架MinimaJS使用介绍
angularjs带有添加删除选项二级联动
二 、识别验证码的算法
想自己编写一个最基本的验证码识别工具。验证码就是那种极为简单的 ,直接把文字保存成图片的那种。求基本算法 。一、验证码的基本知识
1. 验证码的主要目的是强制人机交互来抵御机器自动化攻击的。
2. 大部分的验证码设计者并不得要领 ,不了解图像处理,机器视觉,模式识别 ,人工智能
的基本概念。
3. 利用验证码,可以发财,当然要犯罪:比如招商银行密码只有6位 ,验证码形同虚设,计
算机很快就能破解一个有钱的账户,很多帐户是可以网上交易的 。
4. 也有设计的比较好的 ,比如Yahoo,Google,Microsoft等。而国内Tencent的中文验证
码虽然难,但算不上好。
二、人工智能,模式识别 ,机器视觉,图像处理的基本知识
1)主要流程:
比如我们要从一副图片中,识别出验证码;比如我们要从一副图片中 ,检测并识别出一张
人脸 。 大概有哪些步骤呢?
1.图像采集:验证码呢 ,就直接通过HTTP抓HTML,然后分析出图片的url,然后下载保存就
可以了。 如果是人脸检测识别 ,一般要通过视屏采集设备,采集回来,通过A/D转操作 ,存为
数字图片或者视频频。
2.预处理:检测是正确的图像格式,转换到合适的格式,压缩 ,剪切出ROI,去除噪音,灰度
化 ,转换色彩空间这些 。
3.检测:车牌检测识别系统要先找到车牌的大概位置,人脸检测系统要找出图片中所有
的人脸(包括疑似人脸);验证码识别呢,主要是找出文字所在的主要区域 。
4.前处理:人脸检测和识别 ,会对人脸在识别前作一些校正 ,比如面内面外的旋转,扭曲
等。我这里的验证码识别,“一般”要做文字的切割
5.训练:通过各种模式识别 ,机器学习算法,来挑选和训练合适数量的训练集。不是训练
的样本越多越好 。过学习,泛化能力差的问题可能在这里出现。这一步不是必须的 ,有些识
别算法是不需要训练的。
6.识别:输入待识别的处理后的图片,转换成分类器需要的输入格式,然后通过输出的类
和置信度 ,来判断大概可能是哪个字母 。识别本质上就是分类。
2)关键概念:
图像处理:一般指针对数字图像的某种数学处理。比如投影,钝化,锐化 ,细化,边缘检测,
二值化 ,压缩 ,各种数据变换等等 。
1.二值化:一般图片都是彩色的,按照逼真程度,可能很多级别。为了降低计算复杂度 ,
方便后续的处理,如果在不损失关键信息的情况下,能将图片处理成黑白两种颜色 ,那就最好
不过了。
2.细化:找出图像的骨架,图像线条可能是很宽的,通过细化将宽度将为1 ,某些地方可能
大于1 。不同的细化算法,可能有不同的差异,比如是否更靠近线条中间 ,比如是否保持联通
行等。
3.边缘检测:主要是理解边缘的概念。边缘实际上是图像中图像像素属性变化剧烈的地
方 。可能通过一个固定的门限值来判断,也可能是自适应的 。门限可能是图像全局的,也可
能是局部的。不能说那个就一定好 ,不过大部分时候 ,自适应的局部的门限可能要好点。被
分析的,可能是颜色,也可能是灰度图像的灰度 。
机器视觉:利用计算机来模式实现人的视觉。 比如物体检测 ,定位,识别。按照对图像
理解的层次的差别,分高阶和低阶的理解 。
模式识别:对事物或者现象的某种表示方式(数值 ,文字,我们这里主要想说的是数值),
通过一些处理和分析 ,来描述,归类,理解 ,解释这些事物,现象及其某种抽象。
人工智能:这种概念比较宽,上面这些都属于人工智能这个大的方向。简单点不要过分
学院派的理解就是 ,把人类的很“智能”的东西给模拟出来协助生物的人来处理问题 ,特别是
在计算机里面 。1\第一步, 图片样本特征提取
特征就是能区别各个字符的属性, 这些属性是无穷多的, 比如简单的有字符高度, 宽度都是, 复杂的有不变矩等, 选取几个属性提取就可以了.
这样得到每个字符样本的一组属性并保存为文件
2\提取待识别图片的属性, 与样本特征文件比较, 属性相识的既文字认为是相同的
三 、身份证校验码是怎样计算的
我自己做了个EXCEL表格来进行校验码计算里面有算法你要是需要可以给我你的邮箱,我发过去你要是只想知道算法,我就简单告诉你校验码作为第1位(这里按照18、17、16。。 。1进行号码排列) ,它生成不是随机的,而是通过前17位的计算得出具体算法是前17位分别乘以7,9 ,10,5,8 ,4,2,1 ,6,3,7 ,9 ,10,5,8 ,4,2,然后进行ξ和 ,也就是结果相加;得到的数据模除11(也就是除以11,取其余数),得出0到10共11个数字 ,然后分别对照1,0,X ,9,8,7 ,6 ,5,4,3 ,2进行替换,这便是最终的校验码。举个例子X当你不知道最后一位时,也就是前17位的乘积和(就是分别乘以7 ,9,10,5 ,8,4,2 ,1,6,3 ,7 ,9,10,5 ,8,4,2再求和)是189 ,再除以11,余数为2此时,对照1 ,0,X,9 ,8,7,6 ,5 ,4,3,2的第三位(从0到10顺序替换)得到校验位为X。
四 、往右划的验证码是在验证什么
目前滑动验证码的功能主要还是增加用户的安全 ,验证的是这是人为操作还是机器操作,防止一些不法分子利用自动程序恶意注册登录、暴力破解密码以及批量操作(刷单、发帖)等行为 。如果没有验证码,暴力破解密码后就可以直接登录 ,相反,如果设置了验证码,程序很难识别 ,那么就无法登录成功 。除此之外,还可以防止黑客恶意攻击从而导致服务器压力太大而崩溃,比如论坛灌水 、刷页、刷票等 ,有些论坛回复需要输入验证码就是出于这个目的。
1、识别判断出现的滑动验证码。
这个步骤并不复杂,在编程里有很多这样的调试工具,根据实际应用场景选择合适的专业工具 。然后利用一段获取图片的代码自动获取到带有滑动验证码的图片的信息。最后通过相应代码获取它们的网络地址 ,并将其下载并保存到本地。
2 、确定滑动验证码的滑动位置 ,如果是那种带有缺口位置的验证码,就需要拖动拼合滑块才能完成验证 。
将保存在本地的带有滑动验证码的图片调出来然后分析图片中的相关信息。这个步骤,就需要用到图像匹配技术。通俗的讲 ,就是用相应的原生代码进行图像匹配识别以及坐标定位 。
3 、根据上述收集到相关信息计算滑块移动轨迹并模拟人移动滑块的整个过程。
计算出了滑块移动的轨迹图,接下来就需要模拟人移动基凳态滑块的过程。现在的滑动验证码识别安全性很高,绝大多数都加入了机器学习 模型 ,也粗厅就是说,人在移动滑块的时候不可能是匀速的 。**** 所以说,只是简单的匀速滑动肯定是被认定为机器操作。因此搏源模拟人拖动滑块的过程中需要加入几个过程 ,比如先加速,再减速,适当加入回退和随机抖动 ,尽可能的模拟人的行为。滑动的过程可以通过在代码中设置相应变量,再加上相应公式就可以解决,对于专业人员并不复杂 。