您现在的位置是:网站首页 > 心得笔记
gregwar/captcha实现PHP验证码
简介开发过程中,很多地方都需要使用验证码。gregwar/captcha在Composer下载排行中长居第一名榜位。本文就总结一下简单的使用方法
1、Composer安装gregwar/captcha
composer require gregwar/captcha
切换到项目下,执行以上命令,如果安装成功,会出现下面这种现象

2、html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>PHP验证码</title>
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row main">
<div class="col-md-12">
<div class="row" style="margin: 30px;">
<form class="form-horizontal">
<div class="form-group">
<label for="code" class="col-sm-2 control-label">验证码</label>
<div class="col-sm-10 form-inline">
<input type="text" class="form-control" id="code" placeholder="请输入验证码">
<img alt="点击刷新" id="captcha" style="vertical-align: middle">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">提交</button>
<span id="result"></span>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><script>
//页面一加载就显示一个验证码 当点击刷新后 重新加载验证码
function getCode() {
var ts = Date.parse(new Date()) / 1000;
$('#captcha').attr("src", "/test?id=" + ts);
}
getCode();
$(document).on('click', '#captcha', function(event) {
event.preventDefault();
getCode();
});
//点击提交 需要先判断验证码是否正确
$(document).on('submit', 'form', function(event) {
event.preventDefault();
$.get('/test?action=verify', {code: $('#code').val()}, function(res, textStatus, xhr) {
if (res == 1) {
$('#result').css('color', 'green').html('验证成功!');
} else {
$('#result').css('color', 'red').html(res);
getCode();
}
});
});
</script>
</body>
</html>3、控制器代码
<?php
namespace App\Http\Controllers\Front;
use Gregwar\Captcha\CaptchaBuilder;
use Gregwar\Captcha\PhraseBuilder;
class TestController extends Controller
{
public function index(){
return view('front.test.index');
}
public function test (Request $request) {
session_start();
$action = $request->input('action','');
if ($action == 'verify') {//验证验证码输入是否正确
$code = htmlentities(trim($request->input('code')));//验证码
if ($code == $_SESSION['phrase']) {
echo '1';
} else {
echo '验证码错误!';
}
} else {//输出验证码
$phrase = new PhraseBuilder;
// 设置验证码位数
$code = $phrase->build(4);//如果只想生成数字的验证码,那么这行改为 $code = $phrase->build(4,'1234567890');
// 生成验证码图片的Builder对象,配置相应属性
$builder = new CaptchaBuilder($code, $phrase);
// 设置背景颜色
// $builder->setBackgroundColor(220, 210, 230);
// $builder->setMaxAngle(25);
// $builder->setMaxBehindLines(0);
// $builder->setMaxFrontLines(0);
// 可以设置图片宽高及字体
$builder->build($width = 100, $height = 40, $font = null);
// 获取验证码的内容并保存到session中
$_SESSION['phrase'] = $builder->getPhrase();
// 生成图片
header("Cache-Control: no-cache, must-revalidate");
header("Content-Type:image/jpeg");
$builder->output();
//$builder->save('out.jpg');保存图片
}
}
}4、路由
Route::get('/','Front\TestController@index');
Route::get('/test','Front\TestController@test');5、运行效果


6、常用方法与选项
build($width = 150, $height = 40, $font = null):设置生成的验证码的宽度、高度以及字体。默认情况下,将随机使用库中的字体。
save($filename, $quality = 80):生成一张指定文件名和图片质量的jpg验证码图片。
get($quality = 80):获取jpg图片data数据。
output($quality = 80):向浏览器输出图片。
setBackgroundColor($r, $g, $b):设置验证码背景色,这个选项一般不推荐使用。
getPhrase():获取验证码内容。
下一篇:Git分支管理策略