php php curl识别验证码类类,怎么改变php curl识别验证码类形状

各位dalao有没有图形验证码类推荐?_php吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:136,721贴子:
各位dalao有没有图形验证码类推荐?收藏
现用的字体不扭曲,不变胖,太容易破了。
php学习选达内,O基础入学,名师指导1-4个月从入门到精通,先就业后付款「需高中以上!南昌php培训,达内培训O基础变php高手!免费培训7天试学
自己画,背景图,字体,验证码内容,干扰线 可以用gd库
字体可以自己设置啊。在自己电脑上选一个,粘贴过去。
登录百度帐号推荐应用本文 30825 pv
引用功能被关闭了。
以下内容转载自网络。在上篇文章[]中,讲了如何识别简单的验证,这里的简单指的是验证码有数字和字母组成,格式统一,每次出现位置固定。这篇文章将继续深入研究识别验证码,这次识别的目标是,验证码有字符和数字组成,验证码存在旋转(可能左右都旋转),位置不固定,存在字符与字符之间的粘连,且验证码有更强的干扰素。这篇文章讲解的方法,并不是万能的解决方案,并且提供代码不能直接解决你的问题,这里仅仅是方法,具体需求得有读者自己解决,需要说明的是,识别验证码与具体的编程语言无关,这里只是使用php语言实现,使用这里介绍的方法,你可以使用任何语言实现。这篇文章逐步讲解识别验证码过程中的各个步骤。如下图,随后的讲解我们都围绕此图展开。第一:二值化。把验证码的部分用1表示,背景部分用0表示出来,识别方法很简单,我们打印出验证码整张图片的RGB,然后分析其规律即可,通过RGB码,我们很容易分辨出上面这张图片的R值大于120,G和B的值小于80,所以依据这个规则我们很容易把上面的图片二值化。再看中提到的两张图,刚看上去,感觉很复杂。验证码的图片每次背景色都不相同,且不是单色,各个验证码数字的颜色每次也各不相同。貌似很难二值化,其实我们打印出其RGB值很容易就发现。无论验证数字颜色如何变化,该数字的RGB值总有一个值小于125,所以通过如下判断if($rgbarray['red'] < 125 &#124;&#124; $rgbarray['green']<125&#124;&#124; $rgbarray['blue'] < 125)&#123;&&&&那么验证码的部分用1表示&#125;这样我们就很容易分辨出哪里是数字,哪里是背景。我们能够找到这些规律的因素是,在制作验证码的干扰素时,为了使干扰素不影响数字的显示效果,必须使用干扰素的RGB和数字RGB相互独立,互不干扰。只要懂得这个规律,我们就很容易实现二值化。我们找到的120,80,125等阈值,可能和实际的RGB有出入,所以,有时二值化后,会有部分地方出现1,对于验证码上固定位置显示数字,这种干扰没有太大意义。但是对于验证码位置不确定的图片来说,在我们切割字符时,很可能造成干扰。所以,在二值化后要进行去噪出来。第二:去噪。出燥的原理很简单,就是把孤立的有效的值去掉,如果噪点比较高,要求的效率也比较高的话,这里面也有很多工作要做。幸好这里我们不要求这么高深,我们使用最简单的方法就可以,如果一个点为1则判断这个点的上下、左右、上左、上右、下左、下右、8个方位上数字是否为1,如果不为1,就认为是一个燥点,直接设置为0即可。如上图所示,我们使用此方法很容易发现红色方框部分的1为燥点,直接设置为0即可。在判断时我们使用了一个技巧,有时候的噪点可能是两个连续的1,所以php代码判断如下:$num = 0;
if($data[$i][$j] == 1)
{
if(isset($data[$i-1][$j])){
$num = $num + $data[$i-1][$j];
if(isset($data[$i+1][$j])){
$num = $num + $data[$i+1][$j];
if(isset($data[$i][$j-1])){
$num = $num + $data[$i][$j-1];
if(isset($data[$i][$j+1])){
$num = $num + $data[$i][$j+1];
if(isset($data[$i-1][$j-1])){
$num = $num + $data[$i-1][$j-1];
if(isset($data[$i-1][$j+1])){
$num = $num + $data[$i-1][$j+1];
if(isset($data[$i+1][$j-1])){
$num = $num + $data[$i+1][$j-1];
if(isset($data[$i+1][$j+1])){
$num = $num + $data[$i+1][$j+1];
}
}
if($num == 0){
$data[$i][$j] = 0;
}上面的代码是计算这个点的8个方向上的值之和,最后我们判断他们的和是否小于特定的阈值。第三:切割字符切割字符的方法有很多种,这里我采用最简单的一种,先垂直方向切割成为字符,然后在水平方向去掉多余的0000,如下图:第一步切割红线部分,第二步切割蓝线部分,这样就可以得到独立的字符了。但是像下面这种情况:按上面的方法会把dw字符切割成一个字符,这是错误的切割,所以这里我们涉及到粘连字符的切割。第四:粘连字符切割制作验证码时,规则字符的粘连很容易分割开,如果字符本身有缩放,变形就很难处理,经过分析,我们可以发现,上面的字符粘连属于很简单的方式,只是规则字符的粘连,所以处理这种情况,我们也使用很简单的处理方式。当完成分割操作后,我们不能马上确定分割的部分就为一个字符,要进行验证,验证的关键因素就是,切割下来的字符的宽是否大于阈值,这个阈值的取舍标准是,一个字符无论怎么旋转变形都不会大于这个阈值,所以,如果我们切割的块大于这个阈值,就可以认为这是一个粘连字符;如果大于两个阈值之和,就认为是三个字符粘连,以此类推。知道这个规则后,切割粘连字符也就很简单了。如果我们发现是粘连字符块,直接平分这个块为两个或者多个新的块就可以。当然为了更好的还原字符,我一般都采用平分+1,-1对字符块的部分进行适当的补充。提示:代码当中只考虑到两字粘连字符切割,如果是两个以上的字符粘连,请修改代码支持两个以上的字符粘连切割。第五:匹配字符经过上面四个步骤,我们就可以提取出比较纯的字符块了,接下来要做就是匹配字符了。对于旋转字符的特征码建立,有很多种方法,这里就不做深入研究了。我这里使用的最简单的方式,为所有字符的所有情况建立匹配库,所以在我提供的代码种增加了study操作,其目的就是,先有人手工识别图片的验证码,然后通过study方法,写入特征码库。这样写入的图片数据越多,验证识别的准确行也就越高。好了,经过以上步骤,我们基本上可以识别现在互联网上大部分的验证码,这里我们都是使用的最简单的方法,没有使用任何OCR知识。这些方法,应该属于非OCR领域的顶峰了,要想识别更加复杂的验证码,那就需要更多的OCR知识了。有机会的话,我会在高级篇中一一做介绍。下面是一些容易识别的验证码,希望引起网站管理者的重视。制作验证码的一些建议对于识别验证码的程序来说,最难得部分是验证字符的切割和特征码的建立,而国内很多程序员在做验证码时,总是喜欢在验证码加很多干扰素,干扰线,影响效果不说,还达不到很好的效果;所以要想使自己验证码难于被识别破解,只要做下面两点就够了1:字符粘连,最好所有的字符都有粘连的部分;2:不要使用规格字符,验证码的各个部分使用不同比例的缩放或者旋转。只要做到这两点,或者这两点的变形,识别程序就很难识别。我们看看,yahoo和google的验证码就知道,白字黑底,却很难被识别。Google:yahoo:看不懂??不防看看php实现验证码的破解识别(初级篇):以上php源文件下: (已下载 6040 次)演示地址:
RANDOM POSTS
RECENT POSTS
PREVIOUS POST
Downloads Recommended
Month Most Viewed
not pageMonth Most Commented
not pageAdcolumn非常实用的php验证码类
作者:LoeYueng
字体:[ ] 类型:转载 时间:
这篇文章主要为大家分享了非常实用的php验证码类,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了php验证码类,供大家参考,具体内容如下
* @author Administrator
class ValidateCode{
private $codeN
private $img_
private $disturbColorN
private $checkC
function __construct($width=80,$height=20,$codeNum=4) {
$this-&width=$
$this-&height=$
$this-&codeNum=$codeN
$this-&checkCode=$this-&CreateCheckCode();
$number=floor($width*$height/25);
if ($number&240-$codeNum) {
$this-&disturbColorNum=240-$codeN
$this-&disturbColorNum=$
public function showImage($fontpath='') {
//创建图像背景
$this-&Img_resouce();
//var_dump($img_resouce);
//设置干扰元素
$this-&setDistructcolor();
//向图像中随机画出文本
$this-&outputtext($fontpath);
//输出图像
$this-&outputimage();
*获取随机创建的验证码
public function getCheckCode(){
private function Img_resouce(){
//创建一个真彩图像
$this-&img_resouce=imagecreatetruecolor($this-&width,$this-&height);
//随机设置图像背景
$backcolor=imagecolorallocate($this-&img_resouce,rand(225,255),rand(225,255),rand(225,255));
//填充颜色
imagefill($this-&img_resouce, 0, 0, $backcolor);
//设置边框背景
$border=imagecolorallocate($this-&img_resouce, 0,0,0);
//画一个矩形
imagerectangle($this-&img_resouce,0,0,$this-&width-1,$this-&height-1,$border);
private function setDistructcolor(){
//绘画干扰点
for ($i = 0; $i &$this-&disturbColorN $i++) {
imagesetpixel($this-&img_resouce, rand(1, $this-&width-2), rand(1, $this-&height-2), rand(0,255));
//绘画干扰线
for ($j = 0; $j &3; $j++) {
$linecolor=imagecolorallocate($this-&img_resouce,rand(0,255),rand(0,255),rand(0,255));
imagearc($this-&img_resouce, rand(0,$this-&width), rand(0,$this-&height),
rand(10, 225), rand(20, 150),
55, 44, $linecolor);
private function CreateCheckCode(){
$code='abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ';
$string='';
for ($i = 0; $i & $this-&codeN $i++) {
$char=$code{rand(0, strlen($code)-1)};
$string.=$
private function outputtext($fontpath=''){
for ($i = 0; $i & $this-&codeN $i++) {
$fontcolor=imagecolorallocate($this-&img_resouce, rand(0,128), rand(0, 128), rand(0, 128));
if ($fontpath=='') {
$fontsize=rand(3, 5);
$x=floor($this-&width/$this-&codeNum)*$i+3;
$y=rand(0, $this-&height-20);
imagechar($this-&img_resouce, $fontsize, $x, $y, $this-&checkCode{$i}, $fontcolor);
$fontsize=rand(12, 16);
$x=floor(($this-&width-8)/$this-&codeNum)*$i+8;
$y=rand($fontsize, $this-&height-15);
imagettftext($this-&img_resouce,$fontsize,rand(-45,45),$x,$y,$fontcolor,fontpath,$this-&checkCode{$i});
private function outputimage() {
if (imagetypes() & IMG_GIF) {
header("Content-type: image/gif");
imagegif($this-&img_resouce);
}else if(imagetypes() & IMG_JPEG) {
header("Content-type: image/jpeg");
imagejpeg($this-&img_resouce);
}else if(imagetypes() & IMG_PNG) {
header("Content-type: image/png");
imagepng($this-&img_resouce);
echo "PHP不支持的类型";
private function __destruct(){
imagedestroy($this-&img_resouce);
以上就是本文的全部内容,希望对大家的学习有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具用PHP实现登陆验证码(类似条行码状)用PHP实现登陆验证码(类似条行码状)&phpfunction UPCAbarcode($code) {& $lw = 2; $hi = 100;& $Lencode = array('0001101','0011001','0010011','0111101','0100011',&&&&&&&&&&&&&&&&&& '0110001','0101111','0111011','0110111','0001011');& $Rencode = array('1110010','1100110','1101100','1000010','1011100',&&&&&&&&&&&&&&&&&& '1001110','1010000','1000100','1001000','1110100');& $ends = '101'; $center = '01010';& & if ( strlen($code) != 11 ) {die("UPC-A Must be 11 digits.");}& & $ncode = '0'.$& $even = 0; $odd = 0;& for ($x=0;$x&12;$x++) {&&& if ($x % 2) {$odd += $ncode[$x];} else {$even += $ncode[$x];}&}& $code.=(10 - (($odd * 3 + $even) % 10)) % 10;& & $bars=$& $bars.=$Lencode[$code[0]];& for($x=1;$x&6;$x++) {&&& $bars.=$Lencode[$code[$x]];&}& $bars.=$& for($x=6;$x&12;$x++) {&&& $bars.=$Rencode[$code[$x]];&}& $bars.=$& & $img = ImageCreate($lw*95+30,$hi+30);& $fg = ImageColorAllocate($img, 0, 0, 0);& $bg = ImageColorAllocate($img, 255, 255, 255);& ImageFilledRectangle($img, 0, 0, $lw*95+30, $hi+30, $bg);& $shift=10;& for ($x=0;$x&strlen($bars);$x++) {&&& if (($x&10) || ($x&=45 && $x&50) || ($x &=85)) {$sh=10;} else {$sh=0;}&&& if ($bars[$x] == '1') {$color = $} else {$color = $}&&& ImageFilledRectangle($img, ($x*$lw)+15,5,($x+1)*$lw+14,$hi+5+$sh,$color);&}& & ImageString($img,4,5,$hi-5,$code[0],$fg);& for ($x=0;$x&5;$x++) {&&& ImageString($img,5,$lw*(13+$x*6)+15,$hi+5,$code[$x+1],$fg);&&& ImageString($img,5,$lw*(53+$x*6)+15,$hi+5,$code[$x+6],$fg);&}& ImageString($img,4,$lw*95+17,$hi-5,$code[11],$fg);& & header("Content-Type: image/png");& ImagePNG($img);}UPCAbarcode('');& &你可能感兴趣的文章
扫描二维码用手机看文章

我要回帖

更多关于 php 漂亮 验证码类 的文章

 

随机推荐