PHP code example of zxf / captcha
1. Go to this page and download the library: Download zxf/captcha 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/ */
zxf / captcha example snippets
return [
// ...
zxf\Captcha\Laravel\CaptchaServiceProvider::class,
];
use Illuminate\Http\Request;
public function login(Request $request)
{
// 验证请求
$validated = $request->validate([
'email' => '��验证',
'xf_captcha.xf_captcha' => '验证失败,请重新验证',
]);
// 登录逻辑...
}
return [
// ...
'services' => [
zxf\Captcha\ThinkPHP\CaptchaService::class,
],
];
use zxf\Captcha\Captcha;
public function login()
{
$data = input('post.');
// 验证验证码
$captcha = app('xfCaptcha');
$result = $captcha->verify(null, $data['xf_captcha_token'] ?? '');
if (!$result['success']) {
return json(['code' => 400, 'msg' => $result['message']]);
}
// 登录逻辑...
}
zxf\Captcha\Captcha;
session_start();
// 创建验证码实例
$captcha = new Captcha([
'verify_mode' => Captcha::VERIFY_DUAL, // 双重验证模式
]);
// 获取验证码数据(支持滑动和点击验证码)
if ($_GET['action'] === 'data') {
$isRefresh = isset($_GET['refresh']) || isset($_GET['_s']);
$result = $captcha->makeData([], $isRefresh);
header('Content-Type: application/json');
echo json_encode([
'success' => true,
'code' => 200,
'type' => $result['type'],
'image_base64' => $result['image_base64'],
'hint' => $result['hint'],
'bg_width' => $result['bg_width'],
'bg_height' => $result['bg_height'],
'mark_width' => $result['mark_width'] ?? null,
'mark_height' => $result['mark_height'] ?? null,
'char_count' => $result['char_count'] ?? null,
]);
exit;
}
// 生成验证码图片(向后兼容)
if ($_GET['action'] === 'image') {
$captcha->make();
exit;
}
// 验证
if ($_GET['action'] === 'check') {
$clickPoints = $_GET['click_points'] ?? $_POST['click_points'] ?? [];
if (is_string($clickPoints)) {
$clickPoints = json_decode($clickPoints, true) ?: [];
}
$result = $captcha->verify($_GET['captcha_r'] ?? null, $_GET['xf_captcha_token'] ?? null, $clickPoints);
header('Content-Type: application/json');
echo json_encode($result);
exit;
}
return [
/*
|--------------------------------------------------------------------------
| 验证码类型
|--------------------------------------------------------------------------
|
| - 'slide' : 滑动验证码(传统拼图滑块)
| - 'click' : 点击验证码(按顺序点击图片中的文字/符号)
| - 'both' : 两者同时使用并随机展示(推荐)
|
*/
'captcha_type' => 'both',
/*
|--------------------------------------------------------------------------
| 滑块图片路径
|--------------------------------------------------------------------------
|
| 自定义滑块图片,留空则使用默认图片
|
*/
'slide_dark_img' => '',
'slide_transparent_img' => '',
/*
|--------------------------------------------------------------------------
| 背景图片配置
|--------------------------------------------------------------------------
|
| 可以配置背景图片目录或具体图片路径数组
|
*/
'bg_images_dir' => '',
'bg_images' => [],
/*
|--------------------------------------------------------------------------
| 容错像素值
|--------------------------------------------------------------------------
|
| 滑动位置允许的误差范围(像素)
|
*/
'fault_tolerance' => 3,
/*
|--------------------------------------------------------------------------
| 最大错误次数
|--------------------------------------------------------------------------
|
| 超过此次数后需要刷新验证码
|
*/
'max_error_count' => 10,
/*
|--------------------------------------------------------------------------
| 图片尺寸
|--------------------------------------------------------------------------
*/
'bg_width' => 240,
'bg_height' => 150,
'mark_width' => 50,
'mark_height' => 50,
/*
|--------------------------------------------------------------------------
| 输出格式
|--------------------------------------------------------------------------
*/
'output_format' => 'webp', // 'webp' 或 'png'
'webp_quality' => 40,
'png_quality' => 7,
/*
|--------------------------------------------------------------------------
| Session 前缀
|--------------------------------------------------------------------------
*/
'session_prefix' => 'xf_captcha',
/*
|--------------------------------------------------------------------------
| 资源路由配置
|--------------------------------------------------------------------------
*/
'route_prefix' => 'xf_captcha',
/*
|--------------------------------------------------------------------------
| 验证模式
|--------------------------------------------------------------------------
|
| frontend_only - 仅前端验证(不安全,仅测试)
| backend_only - 仅后端验证
| dual - 双重验证(推荐,最安全)
|
*/
'verify_mode' => 'dual',
/*
|--------------------------------------------------------------------------
| Token 过期时间(秒)
|--------------------------------------------------------------------------
*/
'token_expire' => 300,
/*
|--------------------------------------------------------------------------
| 点击验证码配置
|--------------------------------------------------------------------------
|
*/
'click' => [
// 点击验证的文字数量(推荐 3-5 个)
'char_count' => 4,
// 点击容错范围(像素,推荐 20-30)
'fault_tolerance' => 25,
// 字符库(留空则使用默认中文+符号混合库)
'chars' => [],
// 中文字体路径(自动检测常见系统字体,也可手动指定)
'font_path' => '',
// 文字大小(推荐 24-32,确保清晰可见)
'font_size' => 26,
// 文字颜色 [R, G, B](留空则随机高对比度颜色)
'font_color' => [],
// 是否添加文字阴影/描边增强可读性
'text_stroke' => true,
// 是否添加文字背景半透明遮罩增强可读性
'text_bg_overlay' => true,
// 提示文字模板(%s 会被替换为需要点击的字符)
'hint_text' => '请依次点击:%s',
// 是否启用文字随机旋转(增强安全性)
'text_rotate' => true,
// 最大旋转角度(度数)
'max_rotate' => 30,
],
/*
|--------------------------------------------------------------------------
| 前端配置
|--------------------------------------------------------------------------
*/
'frontend' => [
'theme' => 'auto', // 'light' | 'dark' | 'auto'
'input_name' => 'xf_captcha_token',
'auto_insert_input' => true,
'placeholder' => '点击按钮进行验证',
'slide_text' => '拖动左边滑块完成上方拼图',
'click_text' => '请按照顺序点击图片中的文字',
'success_text' => '✓ 验证成功',
'fail_text' => '验证失败,请重试',
'show_close' => true,
'show_refresh' => true,
'show_ripple' => true,
],
];
bash
php artisan vendor:publish --tag=xf-captcha-config
bash
php think vendor:publish zxf/captcha
javascript
xfCaptcha.init({
showClose: false,
showRefresh: false,
});