我的图片

RSS订阅

  • RSS 2.0
  • 版权声明
人间四月芳非尽,山寺桃花始盛开。常恨春归无觅处,不知转入此山来~!

PHP识别验证码

2008-07-07 13:10:42

天气: 晴朗 心情: 高兴 附件

<?php
i|0E8cTm$V5[Guest喜悦空间\5p(P,ZZ
    $no            = array('36' =>    0,'27' => 1,'32' =>    2,'31' => 3,'35' =>    4,'37' => 5,'39' =>    6,'26' => 7,'40' =>    8, '39'    => 9);//提前计算出的关键像素的数量喜悦空间Q)oF*E,JuF/WN
    $img_scr    = @file_get_contents("http://bj.ganji.com/common/reg_authcode.php?0.9656044610310346");    // 载入图片
FN+P(t:Y+@Guest    $imgObj        = @imagecreatefromstring($img_scr);                            //获取图片的文件字符串
dy/D1WT*CGuest    @imagegif($imgObj,'code.gif');                                            // 将验证码保存成图像文件 // 通过字符串实例一个图像对象
`s4W;O.]/N!_Guest    $img_s        = @getimagesize('code.gif');                                // 获取图像文件的宽高像素
0OW:|-@_wGuest    $imgObjnew    = @imagecreate($img_s[0]-14,$img_s[1]);                        // 把多余部分去掉
5[O3GA uGuest
6wY-o~:OGuest    @imagecopy($imgObjnew, $imgObj,    0, 0, 7, 0,    $img_s[0]-7, $img_s[1]);    //构造一个新的图像对象 他的宽比原图少 14 像素 因为有多余的部分要去掉
$~NC?Mq*@/w6~Guest    $offx=($img_s[0]-14)/4;                                                    //将关键部分复制到新图像对象中 左右个抛弃 7    像素的多余部分
MY'E.d/_P4vGuest    for    ($i=0;$i<4;$i++)                                                    //计算每个数字在图片中的宽度 //一共    4 个数字 $imgs 是转载各个数字图像的数组    // 把验证码一个一个的切下来
VcaI` XGuest    {喜悦空间*UrxDx:I5f ](lq
       $imgs[$i]=@imagecreate($offx,$img_s[1]);                                //实例化他们
9~2~;NH0u ^)OGuest       @imagecopy ($imgs[$i],$imgObjnew,0,0,$i*$offx,0,$offx,$img_s[1]);    //将各个数字图片拷贝到$imgs    数组喜悦空间K GC6U2S0Sn
    }喜悦空间:lNp(_,Y4M

@*Xg1](X,G(MGuest    // 计算每个数字的关键像素点数量喜悦空间'l"D;vE+^9iM1d
    $imp_p    = 0;                            //关键点数量喜悦空间 ]D2P$xs$m)~/{ `o
    $imp_hp    = 0;                            //数字上半部分关键点数量 【由于 6 和 9 的关键点是一样 所以需要计算他们上半部分点数】
RrXMP(N"?d+XGuest    for    ($c=0; $c<4; $c++)喜悦空间)w?,ZSJ3n2v
    {喜悦空间K6P9Q~,L e VY*m5W
        for($i=0; $i<$offx; $i++)            //遍历 x 轴喜悦空间n7gU0U/r
        {
M#|2h|2{3N-x^Guest            for ($j=0;$j<$img_s[1];$j++)    //遍历 y 轴喜悦空间\*}+N*c(q?0d
            {喜悦空间#o/`'baWy/G.z]
                $rgb    = @imagecolorat($imgs[$c],$i, $j); //取得该点的颜色值喜悦空间 j/BYI Uj i"y
                if($rgb == 1)                            $imp_p++;//如果是关键点就计数$imp_p
:F@NuzQ_Guest                if(intval($j > $img_s[1]/2) && $rgb==1)    $imp_hp++;//如果是数字上半部分就计$imp_hp喜悦空间ku6yD5d(y
            }喜悦空间3Ta N Z(T SM3X
         }
J?,\)Z"U cg;JZM%vGuest            $n_res[$c] = $no[$imp_p];                                                // 得出数字结果喜悦空间 \ p`+CL1p"] Z
            if ($n_res[$c]==6||$n_res [$c]==9)    $n_res[$c] = $imp_hp>14 ? 6 : 9;    //如果是 6    或者 9 就比较上半部分的关键点数量
e5u x5O _~bGuest            $imp_hp = $imp_p=0;
5Y g \0@jQycGuest    }
x'Y#H(piRGuest
%a4yOh6F-z f+fGuest    echo "<img    src='code.gif'/> -> ";喜悦空间x&M A0VY-U\
    for ($i=0;$i<4;$i++)    echo    $n_res[$i];            //输出计算结果       
C*d.of3z6wB2@"PGuest    for    ($i=0;$i<4;$i++)    imagedestroy($imgs[$i]);    //释放图像对象
i mM+I i$~Guest
ahW&{iFEGuest    imagedestroy($imgObjnew);喜悦空间#~ Q8LJ4Z m*J
    imagedestroy($imgObj);
&XIQ%TTr-U'wGuest?>

点击查看大图

PHP识别验证码

加入收藏 编辑 审核

TAG:

我来说两句

我的日历

« 2008-11-21  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

统计信息

  • 访问数:5576
  • 日志数:63
  • 图片数:5
  • 文件数:0
  • 商品数:0
  • 书签数:0
  • 建立时间:2006-09-01
  • 更新时间:2008-07-07

最新评论

我的收藏

最新好友

最新留言

OPEN

Powered by X-Space 1.1 © 2001-2006 Comsenz Technology Ltd
冀ICP备06023166号