首頁  >  文章  >  後端開發  >  使用PHP產生帶有乾擾線的驗證碼,幹擾點、字元傾斜詳細類別代碼

使用PHP產生帶有乾擾線的驗證碼,幹擾點、字元傾斜詳細類別代碼

王林
王林轉載
2019-08-21 09:40:593159瀏覽

PHP產生驗證碼的類別代碼,本驗證碼類別支援產生幹擾點、幹擾線等乾擾像素,還可以使字元傾斜。在類別中你可以定義驗證碼寬度、高度、長度、傾斜角度等參數,後面附有詳細用法:

<?php    
    class class_authcode{    
        public  $authcode   = &#39;&#39;; //验证码    
        private $width      = &#39;&#39;; //验证码图片宽    
        private $height     = &#39;&#39;; //验证码图片高    
        private $len        = &#39;&#39;; //验证码长度    
        private $tilt       = array(-30,30);//验证码倾斜角度    
        private $font       = &#39;AlteHaasGroteskBold.ttf&#39;;//字体文件    
        private $str        = &#39;&#39;; //验证码基    
        private $im         = &#39;&#39;; //生成图片的句柄    
        //构造函数    
        function __construct($width=100,$heigh=30,$len=4) {    
            $this->width    = $width;    
            $this->height   = $heigh;    
            $this->len      = $len;    
            $this->str      = &#39;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&#39;;    
            $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(&#39;content-type:image/png&#39;);    
                    imagepng($this->im);    
                    imagedestroy($this->im);    
                }    
            }    
?>

本驗證碼用法說明:

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

以上就是PHP生成驗證碼的類別代碼,不足之處請指出。

更多相關PHP問題請上PHP中文網:https://www.php.cn/

以上是使用PHP產生帶有乾擾線的驗證碼,幹擾點、字元傾斜詳細類別代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:codefans.net。如有侵權,請聯絡admin@php.cn刪除