還算功能比較全的PHP驗證碼類

來源:互聯網
上載者:User

 

看到PHP100視頻34講寫的php驗證碼類,支援自訂圖片大小、字元個數、字元類型、字元大小、圖片類型、漢字驗證碼、幹擾線等,注釋詳細

字型檔是微軟雅黑,和驗證碼檔案同目錄,檔案名稱msyh.ttf,可以從C:\windows\fonts目錄找到,複製到同目錄即可

<?php

/**

 * @version        Id:  imgcode.php 2012-11-30   k

 * @package        imgcode.php

 * @Purview           default

 * @link           http://www.3oom.com

 */

    $img = new img_code();

    $img->show();

 

class img_code{

    private $img_type = 'png';//輸出圖片類型 png,gif,jpg

    private $line      = TRUE;//是否增加幹擾線

    private $text      = '2';//驗證碼類型:0數字,1字母,2漢字

    private $text_size= 20;//字型大小

    private $length      = 4;//字串長度

    private $width      = 120;//圖片寬度,像素

    private $height      = 40;//圖片高度,像素

    private $font_file= 'msyh.ttf';//字型檔

    public  $img      = '';

   

    /*

    * 建立圖片

    */

    private function img_create(){

        $this->img = imagecreate($this->width, $this->height);

        imagecolorallocate($this->img, 255,255,255);

 

    }

    /*

    * 顯示圖片

    */

    public function show(){

       

        @session_start();

        $this->img_create();

        if($this->line){

        $this->img_line();

        }

        $this->img_text();

        $this->img_header();

       

        imagedestroy($im);

        exit();

    }

 

    /*

    * 產生字串

    */

    private function img_text(){

        $rand_string = '';

        $im = &$this->img;

        $fontColor[]  = imagecolorallocate($im, 0x15, 0x15, 0x15);

        $fontColor[]  = imagecolorallocate($im, 0x95, 0x1e, 0x04);

        $fontColor[]  = imagecolorallocate($im, 0x93, 0x14, 0xa9);

        $fontColor[]  = imagecolorallocate($im, 0x12, 0x81, 0x0a);

        $fontColor[]  = imagecolorallocate($im, 0x06, 0x3a, 0xd5);

        if($this->text<2){

            //數字,字母

            for($i=0;$i<$this->length;$i++){

                if($this->text){

                    $c=chr(mt_rand(65,90));

                }else{

                    $c=chr(mt_rand(48,57));

                }

                if( $c=='I' ) $c = 'K';

                if( $c=='O' ) $c = 'E';

                $rand_string[]=$c;

            }   

      

       

        }else{

            //漢字,此處可以引入漢字檔案

           $arr=array('大','小','多','少','人','天','水','土','木','火','雲');

            for($i=0;$i<$this->length;$i++){

                $l = count($arr)-1;               

                //檔案編碼為gbk需要轉換

                //$rand_string[] = iconv('gb2312','utf-8',$arr[mt_rand(0,$l)]);

                $rand_string[] = $arr[mt_rand(0,$l)];

            }

           

        }

          $_SESSION['imgcode']=$rand_string;

          $_c = count($rand_string);

          for($i=0;$i<$_c;$i++)

        {

            if($this->text == 1){

            $rand_string[$i] = strtoupper($rand_string[$i]);

            }

                   

            $c_fontColor = $fontColor[mt_rand(0,4)];

            $y = $this->height-($this->height-$this->text_size)/2;

            $x = ($this->width-($this->text_size+2)*$this->length)/2;

            $y_pos = $i==0 ? $x : $i*($this->text_size+2)+$x;

            $c = mt_rand(0, 15);

            @imagettftext($im, $this->text_size, $c, $y_pos, $y, $c_fontColor, $this->font_file, $rand_string[$i]);

           

        }

    }

    /*

    * 產生線條

    */

    private function img_line(){

        $im = &$this->img;

        $img_width = $this->width;

        $img_height= $this->height;

            //背景橫線

        $lineColor1 = imagecolorallocate($im, 0xda, 0xd9, 0xd1);

        for($j=3; $j<=$img_height-3; $j=$j+3)

        {

            imageline($im, 2, $j, $img_width - 2, $j, $lineColor1);

        }

       

        //背景豎線

        $lineColor2 = imagecolorallocate($im, 0xda,0xd9,0xd1);

        for($j=2;$j<$img_width-6;$j=$j+6)

        {

            imageline($im, $j, 0, $j+8, $img_height, $lineColor2);

        }

   

        //畫邊框

        if( $use_boder && $filter_type == 0 )

        {

            $bordercolor = imagecolorallocate($im, 0x9d, 0x9e, 0x96);

            imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $bordercolor);

        }

    }

    /*

    * 產生輸出

    */

    private function img_header(){

        header("Pragma:no-cache\r\n");

           header("Cache-Control:no-cache\r\n");

            header("Expires:0\r\n");

        if($this->img_type == 'jpg'){

            header('Content-type: image/jpeg');

            imagejpeg($this->img);

        }else if($this->img_type == 'png'){

            header('Content-type: image/png');

            imagepng($this->img);

        }else{

            header('Content-type: image/gif');

            imagegif($this->img);

        }

    }

}

 文章來源:http://www.3oom.com/blog/50.html



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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