php如何?隨機數字和字母驗證碼的代碼

來源:互聯網
上載者:User
php實現隨機數字、字母的驗證碼

  可自訂產生驗證碼文字的大小、數量、幹擾項等等,也可以自訂驗證文字的字型。。。

  廢話不多說,直接上代碼:

<?phpClass Captcha{        private $_fontfile='';        private $_size=36;        private $_width=200;        private $_height=100;        private $_length=4;        private $_image=null;        private $_snow=0;        private $_pixel=0;        private $_line=0;    public function __construct($config=array()){        if(is_array($config)&&count($config)>0){            if(isset($config['fontfile'])&&is_file($config['fontfile'])&&is_readable($config['fontfile'])){                $this->_fontfile=$config['fontfile'];            }else{                return false;            }            if(isset($config['size'])&&$config['size']>0){                $this->_size=(int)$config['size'];            }            if(isset($config['width'])&&$config['width']>0){                $this->_width=(int)$config['width'];            }            if(isset($config['height'])&&$config['height']>0){                $this->_height=(int)$config['height'];            }            if(isset($config['length'])&&$config['length']>0){                $this->_length=(int)$config['length'];            }            if(isset($config['snow'])&&$config['snow']>0){                $this->_snow=(int)$config['snow'];            }            if(isset($config['pixel'])&&$config['pixel']>0){                $this->_pixel=(int)$config['pixel'];            }            if(isset($config['line'])&&$config['line']>0){                $this->_line=(int)$config['line'];            }            $this->_image=imagecreatetruecolor($this->_width,$this->_height);            return $this->_image;         }         else{            return false;        }    }    public function getCaptcha(){        $white=imagecolorallocate($this->_image,255,255,255);        imagefilledrectangle($this->_image,0,0,$this->_width,$this->_height,$white);        $str=$this->_generateStr($this->_length);        if(false===$str){            return false;        }        $fontfile=$this->_fontfile;        for($i=0;$i<$this->_length;$i++){            $size=$this->_size;            $angle=mt_rand(-30,30);            $x=ceil($this->_width/$this->_length)*$i+mt_rand(5,10);            $y=ceil($this->_height/1.5);            $color=$this->_getRandColor();            //針對中文字元截取            //$text=mb_substr($str,$i,1,'utf-8');            $text=$str{$i};            imagettftext($this->_image, $size, $angle, $x, $y, $color, $fontfile, $text);        }        if($this->_snow){            $this->_getSnow();        }else{            if($this->_pixel){                $this->_getPixel();            }            if($this->_line){                $this->_getLine();            }        }        header('content-type:image/png');        imagepng($this->_image);        imagedestroy($this->_image);        return strtolower($str);    }    private function _getSnow(){        for($i=1;$i<=$this->_snow;$i++){            imagestring($this->_image,mt_rand(1,5),mt_rand(0,$this->_width),mt_rand(0,$this->_height),'*',$this->_getRandColor());        }    }    private function _getPixel(){        for($i=1;$i<=$this->_pixel;$i++){            imagesetpixel($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());        }    }    private function _getLine(){        for($i=1;$i<=$this->_line;$i++){            imageline($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());        }    }    private function _generateStr($length=4){        if($length<1 || $length>30){            return false;        }        $chars=array(            'a','b','c','d','e','f','g','h','k','m','n','p','x','y','z',            'A','B','C','D','E','F','G','H','K','M','N','P','X','Y','Z',            1,2,3,4,5,6,7,8,9            );        $str=join('',array_rand(array_flip($chars),$length));        return $str;    }    private function _getRandColor(){        return imagecolorallocate($this->_image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));    }}?>

2、testCaptcha.php

<?phprequire_once 'classgd.class.php';$config=array('fontfile'=>'fonts/simfang.ttf',   //引入字型檔//'snow'=>50,'pixel'=>100,'line'=>10    );$captcha=new Captcha($config);$captcha->getCaptcha();?>

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.