PHP code example of ajiho / think-captcha

1. Go to this page and download the library: Download ajiho/think-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/ */

    

ajiho / think-captcha example snippets



return [
    //随机因子(已排除容易混淆的1和iI、0和oO)
    'charset' => 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789',
    //验证码长度
    'codelen' => '4',
    //宽度
    'width' => '150',
    //高度
    'height' => '50',
    //字体大小
    'fontsize' => '20',
];

//new验证码对象
$captcha = new \ajiho\Captcha();
//这里大家可以根据情况选择存储方式,这里用session做演示
session('captcha', $captcha->getCode());
//输出图片
return $captcha->outImg();


//接受参数
$captcha = input('captcha','');

//判断表单传递过来的验证码和上面存到session中的验证码是否一致
if ($captcha !== session('captcha')) {
   //验证码不正确
}
//如果你不想区分大小写,可以统一都转换为小写再对比
//if (strtolower($captcha) !== strtolower(session('captcha'))) {

//验证通过
//session('captcha', null); //验证通过后根据需要 是否要删除存在session的验证码


//该路由是用于验证码显示
Route::get('captcha/:uniqid', 'Captcha/show');

//验证码接口
Route::get('captcha', 'Captcha/create');

//登录处理
Route::post('login', 'Login/login');

//验证码唯一标识
$uniqid = uniqid((string)mt_rand(100000, 999999));
//说明:这里生成的链接其实就是指向验证码显示方法
$src = (string)\think\facade\Route::buildUrl('/captcha/' . $uniqid)->domain(true);

$data = [
    'src' => $src,
    'uniqid' => $uniqid,
];

//这里你们可以根据自己封装的api接口返回方法返回数据
return Api::ok($data);

public function show($uniqid)
{
 	$captcha = new \ajiho\Captcha();
    //存缓存,时间短一点,减少压力
    cache('captcha_' . $uniqid, $captcha->getCode(), 120);
    //输出图像
    return $captcha->outImg();
}

public function login(Request $request)
{
	$params = $request->all();

    //表单验证
    try {
        validate([
            'username|用户名' => ' ])->check($params);

        //从缓存中根据uniqid取验证码
        $code = cache('captcha_' . $params['uniqid']);
        if (!$code) {//没取到说明验证码过期
            return Api::fail('验证码过期,请刷新后重试');
        }
        //对比缓存中的验证码和表单传递过来的验证码是否相等
        if ($params['code'] !== $code) {
            return Api::fail('验证码错误');
        }

    } catch (ValidateException $e) {
        return Api::fail($e->getError());
    }
	
	//验证通过...向下继续执行你的登录逻辑
}