验证码
一. 生成验证码
在 WeiBo/Home/Controller/UserController.class.php 中写入代码:
1 //实例化验证码类 2 $verify = new Verify();
1 //生成一个验证码图形 2 $verify->entry();
生成验证码如下:
PS:生成的验证码会将信息保存在session中,可以使用print_r($_SESSION)来查看。
查看信息如: Array([d2d977c58444271d9c780187e93f80e5] => Array([verify_code]=>a8074d9454e95c7bd00bfbe61564f91e [verify_time]=>1434883478))
如果想生成多个验证码,可以传递数字参数即可。
1 //生成第一个验证码 2 $verify->entry(1); 3 //生成第二个验证码 4 $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 | 验证码字符集合 |
zhSet | 验证码字符集合(中文) |
1 $config = array( 2 'fontSize' => 20, 3 'length'=>3, 4 'useNoise' => false, 5 ); 6 $verify= new verify($config); 7 $verify->entry(); 8 }
1 上面,采用的配置变量方式来修改验证码参数,也可以使用动态设置方法: 2 //实例化验证码类,并传入参数 3 $verify = new Verify(); 4 //验证码字体大小 5 $verify->fontSize = 30; 6 //验证码位数 7 $verify->length = 3; 8 //关闭验证码杂点 9 $verify->useNoise = false; 10 //生成验证码 11 $verify->entry();
1 //设置验证码字体 2 $verify->fontttf = '5.ttf';
1 //设置背景图片功能,随机使用 2 $verify->useImgBg = true;
1 //取消曲线混淆 2 $verify->useCurve = false;
1 //设置验证码的高 2 $verify->imageH = 100; 3 //设置验证码的宽 4 $verify->imageW = 100;
1 //设置验证码的长度 2 $verify->length = 3;
1 //设置验证码加密密钥 2 $verify->seKey = 'YCKU.COM';
注:加密函数可以在 ThinkPHP/Library/Think/verify.class.php 里查看
1 //设置验证码背景颜色 2 $verify->bg = array(200,200,200);
如果想让验证码显示中文字符,那么需要几个步骤:
1.在 Think/zhttfs 文件夹下引入中文字体文件,比如加粗雅黑 msyhbd.ttf ;
2.设置字体文件;
1 //设置验证码字体 2 $verify->fontttf = 'msyhbd.ttf';
3.设置中文验证码
1 //设置中文验证码 2 $verify->useZh = true;
PS:由于中文字符较为庞大,你也可以限定指定的中文字符。
1 //限定中文字符 2 $verify->zhSet = '我就爱这样';
1 //设置纯数字 2 $verify->codeSet='0123456789';
注:设置中文字体时,如果引入的字体后缀是.ttc文件,则 $verify->fontttf = 还是不变的。
设置纯数字时,要把对中文的设置全部去掉
三. 验证码检测
我们可以使用 ThinkPHP/Library/Think/verify.class.php 类中的 check 方法检测验证码是否输入正确。
第一步:在 WeiBo/Common/Common/function 里构建一个函数:
1 //函数$code 是验证码字符,$id 是第几个验证码,如果只有一个,可以忽略 2 function check_verify($code,$id='') { 3 $verify=new \Think\Verify(); 4 return $verify->check($code,$id); 5 }
然后在 WeiBo/Home/Controller/UserController.class.php 中进行验证:
1 //通过输入验证,来验证,是否返回 true 2 public function test() { 3 $code=I('get.code'); 4 var_dump(check_verify($code)); 5 }
这时先测试得到index()函数的验证码,假设得到的验证码是19425,然后在浏览器地址栏输入 http://localhost/demo39/user/test?code=19425 ,这里在地址栏上加入 ?code=19425 ,在 I('get.code') 中获取,则test()函数输出为: bool(true) ,如果得到的验证码和地址栏最后的code的值不同,则为 bool(false) .