唐长老网络

首页 经验教程PHP教程正文

PHP 生成验证码图片

唐长老网络4个月前144
/**
 * 验证码类
 */
class VeriCode
{
    // 获取验证码配置
    private static function _getCodeConfig()
    {
        return [
            // 验证码字符集
            'codeStr' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
            // 验证码个数
            'codeCount' => 4,
            // 字体大小
            'fontsize' => 25,
            // 验证码的宽度
            'width' => 130,
            // 验证码高度
            'height' => 36,
            // 是否有干扰点?true有,false没有
            'disturbPoint' => false,
            // 干扰点个数,disturbPoint开启后生效
            'pointCount' => 1,
            // 是否有干扰条?true有,false没有
            'disturbLine' => false,
            // 干扰条个数,disturbLine开启后生效
            'lineCount' => 9
        ];
    }

    // 创建图片验证码
    public static function create()
    {
        // 配置
        $config = self::_getCodeConfig();

        //创建画布
        $image = imagecreatetruecolor($config['width'], $config['height']);
        //背景颜色
        $bgcolor = imagecolorallocate($image, 255, 255, 255);
        imagefill($image, 0, 0, $bgcolor);
        $captch_code = '';//存储验证码
        $captchCodeArr = str_split($config['codeStr']);

        //随机选取4个候选字符
        for ($i = 0; $i < $config['codeCount']; $i++) {
            $fontsize = $config['fontsize'];
            $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));//随机颜色
            $fontcontent = $captchCodeArr[rand(0, strlen($config['codeStr']) - 1)];
            $captch_code .= $fontcontent;
            $_x = $config['width'] / $config['codeCount'];
            $x = ($i * (int)$_x) + rand(5, 10);   //随机坐标
            $y = rand(5, 10);
            imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);    // 水平地画一行字符串

        }

        session_start();
        $_SESSION['code'] = $captch_code;
        //增加干扰点
        if ($config['disturbPoint']) {
            for ($i = 0; $i < $config['pointCount']; $i++) {
                $pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
                imagesetpixel($image, rand(1, 99), rand(1, 29), $pointcolor);

            }
        }

        //增加干扰线
        if ($config['disturbLine']) {
            for ($i = 0; $i < $config['lineCount']; $i++) {
                $linecolor = imagecolorallocate($image, rand(80, 280), rand(80, 220), rand(80, 220));
                imageline($image, rand(1, 99), rand(1, 29), rand(1, 99), rand(1, 29), $linecolor);
            }
        }

        //输出格式
        header('content-type:image/png');
        imagepng($image);

        //销毁图片
        imagedestroy($image);
    }


调用 

VeriCode::create();



上一篇:Laravel 基础入门到微信商城实战开发(有源码)

下一篇:jquery回车提交表单

  • 最新发布
  • 7天热门

最新评论

猜你还喜欢这些...

服务热线

13518194439

qrcode

扫一扫二维码,访问手机版