php驗證碼兩種方法


 public function yzm(){
// 創建驗證碼
        $w = 120;
        $h = 50;
// 1.創建畫布
        $im = imagecreatetruecolor($w, $h);
// 2.繪制顏色
        $white = imagecolorallocate($im, 255, 255, 255);
        $rand_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
// 3.填充背景 默認是黑色
        imagefill($im, 0, 0, $white);
// 4.繪制驗證碼
        putenv('GDFONTPATH=' . realpath('.'));
        $font = './simsun.ttc';//字體文件
        $x = 11;
        $word = "";
        for ($i = 0; $i < 4; $i++) {
            $f = 30;
            $rand_num = mt_rand(0, 9);
            $word .= $rand_num;
            $rand_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
            imagettftext($im, 20, mt_rand(-20, 20), $f * $i + $x, 30, $rand_color, $font, $rand_num);
        }
// 把驗證碼存入session
        Session::put('yzm',$word);
// 5.頁面輸出
        header("content-type:image/png");
        imagepng($im);
        //銷毀圖片
        imagedestroy($im);
    }
<?php
function yzm($type=1,$length=1){
    switch ($type){
        case 1://數字
            $arr = str_shuffle(implode(range(0,9)));
           return substr($arr,0,$length);
        case 2://數字+字母
            $arr = array_merge(range(0,9),range('a','z'),range('A','Z'));
            $arr = str_shuffle(implode($arr));
            return substr($arr,0,$length);
        case 3://字母
            $arr = array_merge(range('a','z'),range('A','Z'));
            $arr = str_shuffle(implode($arr));
            return substr($arr,0,$length);
    }
}
$brr= yzm(3,4);
return $brr;


class Code
{
    // 驗證碼個數$number
    protected $number;
    // 驗證碼類型$codeType
    protected $codeType;
    // 驗證碼圖像寬度$width
    protected $width;
    // 驗證碼$height
    protected $height;
    // 驗證碼字符串$code
    protected $code;
    // 圖像資源$image
    protected $image;

    public function __construct($number = 4, $codeType = 0, $height = 50, $width = 100)
    {
        //初始化自己的成員屬性
        $this->number = $number;
        $this->codeType = $codeType;
        $this->width = $width;
        $this->height = $height;

        //生成驗證碼函數
        $this->code = $this->createCode();

    }

    public function __get($name)
    {
        if ($name == 'code') {
            return $this->code;
        }
        return false;
    }

    /*獲取驗證碼*/
    public function getCode()
    {
        return $this->code;
    }

    /*圖像資源銷毀*/
    public function __destruct()
    {
        imagedestroy($this->image);
    }

    protected function createCode()
    {
        //通過你的驗證碼類型生成驗證碼
        switch ($this->codeType) {
            case 0: //純數字
                $code = $this->getNumberCode();
                break;
            case 1: //純字母的
                $code = $this->getCharCode();
                break;
            case 2: //數字和字母混合
                $code = $this->getNumCharCode();
                break;
            default:
                die('不支持此類驗證碼類型');
        }
        return $code;
    }

    protected function getNumberCode()
    {
        $str = join('', range(0, 9));
        return substr(str_shuffle($str), 0, $this->number);
    }

    protected function getCharCode()
    {
        $str = join('', range('a', 'z'));
        $str = $str . strtoupper($str);
        return substr(str_shuffle($str), 0, $this->number);
    }

    protected function getNumCharCode()
    {
        $numstr = join('', range(0, 9));
        $str = join('', range('a', 'z'));
        $str = $numstr . $str . strtoupper($str);
        return substr(str_shuffle($str), 0, $this->number);
    }

    protected function createImage()
    {
        $this->image = imagecreatetruecolor($this->width,
            $this->height);
    }

    protected function fillBack()
    {
        imagefill($this->image, 0, 0, $this->lightColor());
    }

    /*淺色*/
    protected function lightColor()
    {
        return imagecolorallocate($this->image, mt_rand(133, 255), mt_rand(133, 255), mt_rand(133, 255));
    }

    /*深色*/
    protected function darkColor()
    {
        return imagecolorallocate($this->image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
    }

    protected function drawChar()
    {
        $width = ceil($this->width / $this->number);
        for ($i = 0; $i < $this->number; $i++) {
            $x = mt_rand($i * $width + 5, ($i + 1) * $width - 10);
            $y = mt_rand(0, $this->height - 15);
            imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());
        }
    }

    protected function drawLine()
    {
        for ($i = 0; $i < 5; $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->darkColor());
        }
    }

    protected function drawDisturb()
    {
        for ($i = 0; $i < 150; $i++) {
            $x = mt_rand(0, $this->width);
            $y = mt_rand(0, $this->height);
            imagesetpixel($this->image, $x, $y, $this->lightColor());
        }
    }

    protected function show()
    {
        header('Content-Type:image/png');
        imagepng($this->image);
    }

    public function outImage()
    {
//     創建畫布
        $this->createImage();
//     填充背景色
        $this->fillBack();
//     將驗證碼字符串花到畫布上
        $this->drawChar();
//     添加干擾元素
        $this->drawDisturb();
//     添加線條
        $this->drawLine();
//     輸出並顯示
        $this->show();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM