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();
    }
}

 

版权声明:本文为早早早点睡觉原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kukulin/p/16022123.html