svg-captcha-isszz用 PHP 生成 SVG 格式驗(yàn)證碼
在 PHP 中生成 SVG 格式的驗(yàn)證碼。
部分代碼依賴(lài) thinkphp6。
安裝
composer require isszz/svg-captcha -vvv
接下來(lái)將字體放入tp根目錄下的config/font目錄
配置
<?php
// SVG 驗(yàn)證碼配置
return [
'width' => 150, // 寬度
'height' => 50, // 高度
'noise' => 5, // 干擾線條的數(shù)量
'inverse' => false, // 反轉(zhuǎn)顏色
'color' => true, // 文字是否隨機(jī)色
'background' => '', // 驗(yàn)證碼背景色
'size' => 4, // 驗(yàn)證碼字?jǐn)?shù)
'ignoreChars' => '', // 驗(yàn)證碼字符中排除
'fontSize' => 52, // 字體大小
'charPreset' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', // 預(yù)設(shè)隨機(jī)字符
'math' => '', // 計(jì)算類(lèi)型, 如果設(shè)置不是+或-則隨機(jī)兩種
'mathMin' => 1, // 用于計(jì)算的最小值
'mathMax' => 9, // 用于計(jì)算的最大值
'fontName' => 'Comismsh.ttf', // 用于驗(yàn)證碼的字體, 建議字體文件不超過(guò)3MB
];
使用方法
控制器內(nèi)使用??
<?php
declare (strict_types = 1);
namespace app\index\controller;
use think\Response;
use think\Request;
class Captcha
{
/**
* 獲取驗(yàn)證碼, 用于api
*/
public function index(Request $request)
{
$config = $this->BuildParam($request->param());
return json([
'code' => 0,
'data' => svg_captcha($config),
'msg' => 'success',
]);
}
/**
* 直接顯示svg驗(yàn)證碼
*/
public function svg(Request $request)
{
$config = $this->BuildParam($request->param());
$content = svg_captcha($config);
return response($content, 200, ['Content-Length' => strlen($content)])->contentType('image/svg+xml');
}
/**
* 驗(yàn)證輸入驗(yàn)證碼是否正確
*/
public function check($code)
{
if(svg_captcha_check($code) === true) {
return json([
'code' => 0,
'data' => null,
'msg' => 'success',
]);
}
return json([
'code' => 1,
'data' => null,
'msg' => 'error',
]);
}
/**
* 根據(jù)傳入?yún)?shù)組裝配置
*
* /captcha/svg//w/200/h/60/s/72/l/5
*/
public function BuildParam($params = [])
{
$config = [];
if(empty($params)) {
return [];
}
// 模式,1=加法 2=減法, 或者隨機(jī)兩種
if(!empty($params['m'])) {
if($params['m'] == 1) {
$config['math'] = '+';
} elseif($params['m'] == 2) {
$config['math'] = '-';
} else {
$config['math'] = 'rand';
}
}
if(!empty($params['w'])) {
$config['width'] = $params['w'];
}
if(!empty($params['h'])) {
$config['height'] = $params['h'];
}
// 文字大小
if(!empty($params['s'])) {
$config['fontSize'] = $params['s'];
}
// 顯示文字?jǐn)?shù)量, 非算數(shù)模式有效
if(!empty($params['l'])) {
$config['size'] = $params['l'];
}
// 干擾線條數(shù)量
if(!empty($params['n'])) {
$config['noise'] = $params['n'];
}
// 背景色, #fefefe
if(!empty($params['b'])) {
$config['background'] = $params['b'];
}
return $config;
}
}
注冊(cè)進(jìn)tp驗(yàn)證工具
Validate::maker(function ($validate) {
$validate->extend('svgcaptcha', function ($value) {
return svg_captcha_check($value);
}, ':attribute錯(cuò)誤!');
});
本組件基于如下開(kāi)源庫(kù)
- php字體庫(kù): PhenX/php-font-lib
- svg-captcha nodejs版: lichaozhy/svg-captcha
評(píng)論
圖片
表情
