验证码识别原理及实现方法.doc_第1页
验证码识别原理及实现方法.doc_第2页
验证码识别原理及实现方法.doc_第3页
验证码识别原理及实现方法.doc_第4页
验证码识别原理及实现方法.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

验证码识别原理及实现方法验证码的作用:有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。其实现代的验证码一般是防止机器批量注册的,防止机器批量发帖回复。目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。我们最常见的验证码1,四位数字,随机的一数字字符串,最原始的验证码,验证作用几乎为零。2,随机数字图片验证码。图片上的字符比较中规中矩,有的可能加入一些随机干扰素,还有一些是随机字符颜色,验证作用比上一个好。没有基本图形图像学知识的人,不可破!3,各种图片格式的随机数字+随机大写英文字母+随机干扰像素+随机位置。4,汉字是注册目前最新的验证码,随机生成,打起来更难了,影响用户体验,所以,一般应用的比较少。简单起见,我们这次说明的主要对象是第2种类型的,我们先看几种网上比较常见的这种验证码的图片.这四种样式,基本上能代表2中所提到的验证码类型,初步看起来第一个图片最容易破解,第二个次之,第三个更难,第四个最难。真实情况那?其实这三种图片破解难度相同。第一个图片,最容易,图片背景和数字都使用相同的颜色,字符规整,字符位置统一。第二个图片,看似不容易,其实仔细研究会发现其规则,背景色和干扰素无论怎么变化,验证字符字符规整,颜色相同,所以排除干扰素非常容易,只要是非字符色素全部排除即可。第三个图片,看似更复杂,处理上面提到背景色和干扰素一直变化外,验证字符的颜色也在变化,并且各个字符的颜色也各不相同。看似无法突破这个验证码,本篇文章,就一这种类型验证码为例说明,第四个图片,同学们自己搞。第四个图片,除了第三个图片上提到的特征外,又在文字上加了两条直线干扰率,看似困难其实,很容易去掉。验证码识别一般分为以下几个步骤:1.取出字模2.二值化3.计算特征4.对照样本1:取出字模识别验证码,毕竟不是专业的OCR识别,并且,由于各个网站的验证码各不相同,所以,最常见的方法就是就是建立这个验证码的特征码库。去字模时,我们需要多下载几张图片,使这些图片中,包括所有的字符,我们这里的字母只有图片,所以,只要收集到包括0-9的图片即可。2:二值化二值化就是把图片上的验证数字上每个象素用一种数字表示1,其他部分用0表示。这样就可以计算出每个数字字模,记录下这些字模来,当作key即可。3:计算特征把要识别的图片,进行二值化,得到图片特征。4:对照样本把步骤3种的图片特征码和验证码的字模进行对比,得到验证图片上的数字。使用目前这种方法,对验证码的识别基本上可以做到100%。通过以上步骤,您可能说了,并没有发现如何取出干扰素啊!其实取出干扰素的方法很简单,干扰素的一个重要特征是,不能影响验证码的显示效果,所以制作干扰素时它的RGB可能低于或者高于某个特定值,比如我给的例子中的图片,干扰素的RGB各项值是不会超过125的,所以,这样我们就很容易去掉干扰素了。ImagePath=$Image;publicfunctiongetData()return$data;publicfunctiongetResult()return$DataArray;publicfunctiongetHec()$res=imagecreatefromjpeg($this-ImagePath);$size=getimagesize($this-ImagePath);$data=array();for($i=0;$i$size1;+$i)for($j=0;$j$size0;+$j)$rgb=imagecolorat($res,$j,$i);$rgbarray=imagecolorsforindex($res,$rgb);if($rgbarrayred125|$rgbarraygreen125|$rgbarrayblueDataArray=$data;$this-ImageSize=$size;publicfunctionrun()$result=;/查找4个数字$data=array(,);for($i=0;$i4;+$i)$x=($i*(WORD_WIDTH+WORD_SPACING)+OFFSET_X;$y=OFFSET_Y;for($h=$y;$h(OFFSET_Y+WORD_HIGHT);+$h)for($w=$x;$wDataArray$h$w;/进行关键字匹配foreach($dataas$numKey=$numString)$max=0.0;$num=0;foreach($this-Keysas$key=$value)$percent=0.0;similar_text($value,$numString,$percent);if(intval($percent)$max)$max=$percent;$num=$key;if(intval($percent)95)break;$result.=$num;$this-data=$result;/查找最佳匹配数字return$result;publicfunctionDraw()for($i=0;$iImageSize1;+$i)for($j=0;$jImageSize0;+$j)echo$this-DataArray$i$j;echon;publicfunction_construct()$this-Keys=array(0=000111000011111110011000110110000011110000011110000011110000011110000011110000011110000011011000110011111110000111000,1=000111000011111000011111000000011000000011000000011000000011000000011000000011000000011000000011000011111111011111111,2=011111000111111100100000110000000111000000110000001100000011000000110000001100000011000000110000000011111110111111110,3=011111000111111110100000110000000110000001100011111000011111100000001110000000111000000110100001110111111100011111000,4=000001100000011100000011100000111100001101100001101100011001100011001100111111111111111111000001100000001100000001100,5=111111110111111110110000000110000000110000000111110000111111100000001110000000111000000110100001110111111100011111000,6=000111100001111110011000010011000000110000000110111100111111110111000111110000011110000011011000111011111110000111100,7=011111111011111111000000011000000010000000110000001100000001000000011000000010000000110000000110000001100000001100000,8=001111100011111110011000110011000110011101110001111100001111100011101110110000011110000011111000111011111110001111100,9=0011110000111111101110001111100000111100000111110001110

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论