Thinkphp框架中自带验证码的生成和验证功能 Verify.class.PHP ,在ThinkPHP/Library/Think目录下面
简单使用,在控制器中
public function verify(){
$Verify = new \Think\Verify();
$Verify->fontSize = 18; // 验证码字体大小(像素)
$Verify->length = 4; // 验证码位数
$Verify->useNoise = false; //是否添加杂点 默认为true
$Verify->codeSet = '0123456789'; // 验证码字符集合
$Verify->imageW = 130; // 验证码宽度 设置为0为自动计算
$Verify->imageH = 50; // 验证码高度 设置为0为自动计算
$Verify->entry();
}
在前台代码中
<div id="reg">
<h2>会员登录</h2>
<form method="post" action="http://testphp.com/home/users/entry">
<div>
<br />
<div>用 户 名:<input type="text" name="username" class="text" /></div>
<br />
<div>密 码:<input type="password" name="password" class="text" /></div>
<br />
<div>验 证 码:<input name="verify" width="50%" height="50" class="captcha-text" type="text" /></div>
<br />
<div><img width="20%" class="left15" height="30" alt="验证码" src="__APP__/home/users/verify" title="点击刷新" οnclick="this.src='__APP__/home/users/verify?'+Math.random()" /></div> <!-- Math.random()可以产生随机数,可以有效的进行验证码刷新 -->
<br />
<div><input type="submit" class="submit" value="登录" /> <a href="http://testphp.com/home/users/reg">免费注册</a></div>
</div>
</form>
</div>
详细信息
最简单的方式生成验证码:
$Verify = new \Think\Verify();
$Verify->entry();
上面的代码会生成默认的验证码图片并输出,显示如下:
生成的验证码信息会保存到session中,包含的数据有:
array(
'verify_code'=>'当前验证码的值',
'verify_time'=>'验证码生成的时间戳'
)
如果需要在一个页面中生成多个验证码的话,entry方法需要传入可标识的信息,例如:
验证码1
// 验证码1
$Verify = new \Think\Verify();
$Verify->entry(1);
验证码2
// 验证码2
$Verify = new \Think\Verify();
$Verify->entry(2);
验证码参数
可以对生成的验证码设置相关的参数,以达到不同的显示效果。 这些参数包括:
参数 | 描述 |
---|---|
expire | 验证码的有效期(秒) |
useImgBg | 是否使用背景图片 默认为false |
fontSize | 验证码字体大小(像素) 默认为25 |
useCurve | 是否使用混淆曲线 默认为true |
useNoise | 是否添加杂点 默认为true |
imageW | 验证码宽度 设置为0为自动计算 |
imageH | 验证码高度 设置为0为自动计算 |
length | 验证码位数 |
fontttf | 指定验证码字体 默认为随机获取 |
useZh | 是否使用中文验证码 |
bg | 验证码背景颜色 rgb数组设置,例如 array(243, 251, 254) |
seKey | 验证码的加密密钥 |
codeSet | 验证码字符集合 3.2.1 新增 |
zhSet | 验证码字符集合(中文) 3.2.1 新增 |
参数设置使用两种方式
实例化传入参数:
Public function verify(){
$config = array(
'fontSize' => 30, // 验证码字体大小
'length' => 3, // 验证码位数
'useNoise' => false, // 关闭验证码杂点
);
$verify = new \Think\Verify($config);
$verify->entry();
}
动态设置的方式:
$Verify = new \Think\Verify();
$Verify->fontSize = 30;
$Verify->length = 3;
$Verify->useNoise = false;
$Verify->entry();
生成的验证码如图所示:
验证码字体
默认情况下,验证码的字体是随机使用 ThinkPHP/Library/Think/Verify/ttfs/目录下面的字体文件,我们可以指定验证码的字体,例如:
$Verify = new \Think\Verify();
// 验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
$Verify->fontttf = '5.ttf';
$Verify->entry();
支持验证码背景图片功能:
$Verify = new \Think\Verify();
// 开启验证码背景图片功能 随机使用 ThinkPHP/Library/Think/Verify/bgs 目录下面的图片
$Verify->useImgBg = true;
$Verify->entry();
效果如图所示:
中文验证码
$Verify = new \Think\Verify();
// 验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
$Verify->useZh = true;
$Verify->entry();
效果如图所示:
如果无法正常显示,需要确认 ThinkPHP/Library/Think/Verify/zhttfs/ 目录下面存在中文字体文件。
指定验证码字符
通过重新设置codeSet参数:
$Verify = new \Think\Verify();
// 设置验证码字符为纯数字
$Verify->codeSet = '0123456789';
$Verify->entry();
$Verify = new \Think\Verify();
$Verify->useZh = true;
// 设置验证码字符
$Verify->zhSet = '们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在了不和有大这';
$Verify->entry();
验证码检测
可以用Think\Verify类的check方法检测验证码的输入是否正确:
// 检测输入的验证码是否正确,$code为用户输入的验证码字符串
function check_verify($code, $id = ''){
$verify = new \Think\Verify();
return $verify->check($code, $id);
}