PHP code example of isszz / think-scaptcha

1. Go to this page and download the library: Download isszz/think-scaptcha library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

isszz / think-scaptcha example snippets


return [
    'type' => null, // 单独的配置项
    'cache' => true, // 是否启用字形缓存
    'api' => false, // 是否是API模式
    // 设置为1时不管验证对错, 都会删除存储凭证,若验证失败则需要刷新一次验证码
    // 设置为0时, 直到验证输入正确时, 才删除存储凭证,也就是允许试错
    // 非API模式或者未配置token机制,则需要设置2才能让验证码为一次性
    'disposable' => 0,
    'width' => 150, // 宽度
    'height' => 50, // 高度
    'noise' => 5, // 干扰线条的数量
    'inverse' => false, // 反转颜色
    'color' => true, // 文字是否随机色
    'background' => '', // 验证码背景色
    'size' => 4, // 验证码字数
    'ignoreChars' => '', // 验证码字符中排除
    'fontSize' => 52, // 字体大小
    'char' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', // 预设随机字符
    'math' => '', // 运算模式:1=加法,2=减法,3=乘法,4=除法,或非1=4,则随机四种
    'mathMin' => 1, // 用于计算的最小值
    'mathMax' => 9, // 用于计算的最大值
    'fontName' => 'Comismsh.ttf', // 用于验证码的字体, 字体文件需要放置根目录config/fonts/目录下面

    // API模式,使用token机制,使用这里的配置后API会携带一个token,在验证时需要携带token和输入的code进行验证
    /*'token' => [
        // 也可以自定义\app\common\libs\MyStore::class,
        // 自带可选:cache,redis,session;
        // 建议使用redis或者cache(tp自带缓存),session会牵扯跨域
        'store' => 'cache', 
        'expire' => 300,
        // 不配置时会获取tp的cache->redis驱动实例
        'redis' => [
            'host' => '127.0.0.1',
            'port' => 6379,
            'password' => '',
            'select' => 1,
            'timeout' => 0,
        ],
    ],*/

    // 单独的配置, 会覆盖上面的配置
    'test' => [
        'noise' => 3,
        'color' => false,
        'char' => '0123456789',
        // 'token' => null,
    ],
];

{
    'code': 0,
    'msg': 'success',
    'token': '8SOy2KSfcSVIP7qTogFCLvLZb9tj5eTB', // API模式,使用token机制否则返回null
    'svg': 'data:image/svg+xml,.../%3E%3C/svg%3E',
}


[$token, $image] = scaptcha_api([
    'noise' => 3, // 3条干扰线
    'color' => false, // 灰色模式
    'char' => '0123456789', // 数字验证码
]);

// 或指定单独的配置,第二个参数用于选择生成的格式false=svg,true=base64
[$token, $image] = scaptcha_api('test', true);

class Captcha
{
    /**
     * 获取验证码, 用于api
    */
    public function index()
    {
        return json([
            'code' => 0,
            'data' => scaptcha(),
            'msg' => 'success',
        ]);
    }

    /**
     * 直接显示svg验证码
    */
    public function svg()
    {   
        $content = scaptcha();
        
        return response($content, 200, ['Content-Length' => strlen($content)])->contentType('image/svg+xml');
    }

    /**
     * 验证输入验证码是否正确|输出json
    */
    public function check($code, string|null $token = null)
    {
        $json = [
            'code' => 0,
            'msg' => 'success',
            'data' => null,
        ];

        if(!scaptcha_check($code, $token)) {
            $json['code'] = 1;
            $json['msg'] = 'error';
        }

        return json($json);
    }
}


$this->validate($data, [
    'scaptcha|验证码' => '

if(!scaptcha_check($code)) {
    // 验证失败
}
html
<!-- 配置项参考URL参数配置 -->

    $captchaSrc = scaptcha_src([
        'l' => 5,
    ]);