# svg-captcha
**Repository Path**: isszz/svg-captcha
## Basic Information
- **Project Name**: svg-captcha
- **Description**: php svg captcha
- **Primary Language**: PHP
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2019-11-03
- **Last Updated**: 2024-10-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# svg-captcha
> 在php中生成svg格式的验证码
> thinkphp6 svg-captcha
> 还没有优化字形这块, 不知道把字形数据缓存下来能不能解决大文件字体处理慢的问题
## 安装
```shell
composer require isszz/svg-captcha -vvv
```
> 接下来将字体放入tp根目录下的config/font目录
## 配置
```php
150,
'height' => 50,
'noise' => 5, // 干扰线条的数量
'inverse' => false, // 反转颜色
'color' => true, // 文字是否随机色
'background' => '#fefefe', // 验证码背景色
'size' => 4, // 验证码字数
'ignoreChars' => '', // 验证码字符中排除
'fontSize' => 52, // 字体大小
'charPreset' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', // 预设随机字符
'math' => '', // 计算类型, 如果设置不是+或-则随机两种
'mathMin' => 1, // 用于计算的最小值
'mathMax' => 9, // 用于计算的最大值
'salt' => '^%$YU$%%^U#$5', // 用于加密验证码的盐
'fontName' => 'Comismsh.ttf', // 用于验证码的字体, 建议字体文件不超过3MB
];
```
## 使用方法
控制器内使用🌰
```php
BuildParam($request->param());
return json([
'code' => 0,
'data' => svg_captcha($config),
'msg' => 'success',
]);
}
/**
* 直接显示svg验证码
*/
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');
}
/**
* 验证输入验证码是否正确
*/
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',
]);
}
/**
* 根据传入参数组装配置
*
* /captcha/svg/w/200/h/60/s/72/l/5
*/
public function BuildParam($params = [])
{
$config = [];
if(empty($params)) {
return [];
}
// 模式,1=加法 2=减法, 或者随机两种
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'];
}
// 显示文字数量, 非算数模式有效
if(!empty($params['l'])) {
$config['size'] = $params['l'];
}
// 干扰线条数量
if(!empty($params['n'])) {
$config['noise'] = $params['n'];
}
// 背景色, #fefefe
if(!empty($params['b'])) {
$config['background'] = $params['b'];
}
return $config;
}
}
```
## 注册进tp验证工具
```php
Validate::maker(function ($validate) {
$validate->extend('svgcaptcha', function ($value) {
return svg_captcha_check($value);
}, ':attribute错误!');
});
```
## 本组件基于如下开源库
- php字体库: [PhenX/php-font-lib](https://github.com/PhenX/php-font-lib)
- svg-captcha nodejs版: [lichaozhy/svg-captcha](https://github.com/lichaozhy/svg-captcha)