• 技术文章 >后端开发 >php教程

    使用PHP生成带有干扰线的验证码,干扰点、字符倾斜详细类代码

    王林王林2019-08-21 17:56:55转载1574
    PHP生成验证码的类代码,本验证码类支持生成干扰点、干扰线等干扰像素,还可以使字符倾斜。在类中你可以定义验证码宽度、高度、长度、倾斜角度等参数,后附有详细用法:

    <?php    
        class class_authcode{    
            public  $authcode   = ''; //验证码    
            private $width      = ''; //验证码图片宽    
            private $height     = ''; //验证码图片高    
            private $len        = ''; //验证码长度    
            private $tilt       = array(-30,30);//验证码倾斜角度    
            private $font       = 'AlteHaasGroteskBold.ttf';//字体文件    
            private $str        = ''; //验证码基    
            private $im         = ''; //生成图片的句柄    
            //构造函数    
            function __construct($width=100,$heigh=30,$len=4) {    
                $this->width    = $width;    
                $this->height   = $heigh;    
                $this->len      = $len;    
                $this->str      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';    
                $str_len = strlen($this->str)-1;    
                for ($i=0; $i<$len; $i++) {    
                    $this->authcode .= $this->str[rand(0,$str_len)];    
                }    
            }    
            //生成验证码图片    
            private function imagecreate(){    
                $this->im = imagecreatetruecolor($this->width,$this->height);    
            }    
            //干扰颜色    
            private function ext_color() {    
                return imagecolorallocate($this->im,rand(50, 180),rand(50, 180),rand(50, 180));    
            }    
            //生成干扰点    
            private function ext_point() {    
                for ($i=0; $i<$this->width*2; $i++) {    
                    imagesetpixel($this->im,rand(1,$this->width-1),rand(1,$this->height-1),$this->ext_color());    
                }    
            }
             //生成干扰线    
                    private function ext_line() {    
                        for ($i=0; $i<$this->len; $i++) {    
                            $x1 = rand(1,$this->width-1);    
                            $y1 = rand(1,$this->height-1);    
                            $x2 = rand(1,$this->width-1);    
                            $y2 = rand(1,$this->height-1);    
                            imageline($this->im,$x1,$y1,$x2,$y2,$this->ext_color());    
                        }    
                    }
                    //把验证码写入图片(不能和$this->imgstrfloat()同时使用)    
                    private function imgstr() {    
                        $old_x = 1;    
                        for ($i=0; $i<$this->len; $i++) {    
                            $fontsize = rand(2,5);      //字体大小    
                            $tmp_1 = $fontsize*2.5;    
                            $tmp_2 = $i>0  $tmp_1 : 0;    
                            $y = rand(1,$this->height/2);    
                            $x = rand($old_x+$tmp_2, ($i+1)*($this->width)/$this->len-$tmp_1);    
                            $old_x = $x;    
                            $color = imagecolorallocate($this->im,rand(200, 255),rand(200, 255),rand(200, 255));    
                            imagestring($this->im,$fontsize,$x,$y,$this->authcode[$i],$color);    
                        }    
                    }
                    //把验证码倾斜写入图片(注意这里不能和$this->imgstr()方法同时使用)    
                     private function imgstrfloat() {    
                        $old_x = 1;    
                        for ($i=0; $i<$this->len; $i++) {    
                            $fontfloat = rand($this->tilt[0],$this->tilt[1]);    
                            $fontsize = rand(10,15);        //字体大小    
                            $tmp_1 = $i>0  $fontsize : 0;    
                            $y = rand($fontsize+2, $this->height-2);    
                            $x = rand($old_x+$tmp_1+2, ($i+1)*($this->width)/$this->len-$fontsize-2);    
                            $old_x = $x;    
                            $color = imagecolorallocate($this->im, rand(200, 255), rand(200, 255), rand(200, 255));    
                            imagettftext($this->im, $fontsize, $fontfloat, $x, $y, $color, $this->font, $this->authcode[$i]);    
                        }    
                    } 
                    //输出验证码图片    
                    function output() {    
                        $this->imagecreate();    
                        $this->imgstr();    
                        //$this->imgstrfloat();    
                        $this->ext_point();    
                        $this->ext_line();    
                        header('content-type:image/png');    
                        imagepng($this->im);    
                        imagedestroy($this->im);    
                    }    
                }    
    ?>

    本验证码用法说明:

    $obj = new class_authcode();//实例化对象,并设置验证码图片的宽、高和验证码的长度    
    $obj->$authcode; //获取验证码    
    $obj->output(); //输出验证码图片

    以上就是PHP生成验证码的类代码,不足之处请指出。

    更多相关PHP问题请访问PHP中文网://m.sbmmt.com/

    php入门到就业线上直播课:查看学习

    以上就是使用PHP生成带有干扰线的验证码,干扰点、字符倾斜详细类代码的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:源码爱好者,如有侵犯,请联系admin@php.cn删除

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:验证码
    上一篇:关于PHP安全编程的一些建议 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 验证码有什么用• PHP生成中文验证码并检测对错实例• python如何识别验证码• API 交互中怎么做好图片验证码
    1/1

    PHP中文网