thinkphp 动态验证码
控制器传输到html 数据处理
<foreach name='vlist' item='v'>
<tr>
<td><input type="checkbox" name="key[]" value="{$v.id}"></td>
<td>{$v.userid}</td>
<td>{$v.loginname}</td>
<td>{$v.usermobile}</td>
<td id="{$v.userid}">正在获取余额</td>
<td >{$v.lastlogintime|date='Y-m-d H:i:s', ###}</td> 时间处理
<td >{$v.addtimes|date='Y-m-d H:i:s', ###}</td>
<td >{$v.userimg}</td>
</td>
</tr>
<script>getMoney({$v.userid});</script>
</foreach>
<?php
namespace Home\Controller;
use Think\Controller;
class TestController extends Controller
{
public function test()
{
$y=D("YongHu");
$arr=array(
array('uid','require','用户名不能为空!'), //表单验证
);
if($y->validate($arr)->create()) //使用validate 把规则加进来 判断是否成功
{ $verify = new \Think\Verify();
$a= $verify->check($_POST["yzm"]); //验证验证码的方法 if($a) //验证通过返回 true
{ echo"" ; //验证成功
$y->add();
$this->ajaxReturn("通过验证","eval");
}
else
{
echo""; //验证失败
}
}
else
{
$this->ajaxReturn($y->getError(),"eval");//表单验证错误信息
} }
public function yzm()
{
$V= new \Think\Verify(); //生成动态图验证码的方法
$V->entry();
}
Think\Verify类可以支持验证码的生成和验证功能。
生成验证码
下面是最简单的方式生成验证码:
$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 新增 |
参数设置使用两种方式。
实例化传入参数:
$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/ 目录下面存在中文字体文件。
指定验证码字符
3.2.1版本以上,我们可以指定验证码的字符,通过重新设置codeSet参数即可,例如:
$Verify = new \Think\Verify();
// 设置验证码字符为纯数字
$Verify->codeSet = '0123456789';
$Verify->entry();
如果是中文验证码,可以使用zhSet参数设置,例如:
$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);
}
thinkphp 动态验证码的更多相关文章
- 由12306动态验证码想到的ASP.NET实现动态GIF验证码(附源码)
背景: 12306网站推出“彩色动态验证码机制”,新版验证码不但经常出现字符叠压,还不停抖动,不少人大呼“看不清”,称“那个验证码,是毕加索的抽象画么!”铁总客服则表示:为了能正常购票只能这样.而多家 ...
- C#之asp.net 及MVC 生成动态验证码:
C#之asp.net 及MVC 生成动态验证码: 1.生成验证码字符串 // 随机生成指定长度的验证码字符串private string RandomCode(int length) { string ...
- 动态验证码处理UI自动化获取处理
解决思路两种:1.直接linux catalina.out读取:一分每10s轮询出现新的直接读取返回<br>2.缓存注入cookie,先手动登录获取session 然后通过注入user,p ...
- Django之动态验证码的生成
kind.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 修改ThinkPHP的验证码类
今天用ThinkPHP重新开发一个系统,用到了ThinkPHP的验证码类,由于我希望验证码别太复杂,希望验证码里边只有数字,却发现该Verify类并未提供设置验证码中使用的字符的配置的方法,于是查看源 ...
- java的动态验证码单线设计
1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...
- Servlet仿CSDN动态验证码的生成-带数字和字母
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.实现的思路: (1)首先,须要创建一个Servlet.该Servlet通过字节型响应给cl ...
- thinkphp动态注册路由
thinkphp动态注册路由 一.总结 1.thinkphp使用路由步骤:a.config配置文件中开启路由 b.Route类的rule方法创建路由(在Routephp中)Route::rule(' ...
- .NET中生成动态验证码
.NET中生成动态验证码 验证码是图片上写上几个字,然后对这几个字做特殊处理,如扭曲.旋转.修改文字位置,然后加入一些线条,或加入一些特殊效果,使这些在人类能正常识别的同时,机器却很难识别出来,以达到 ...
随机推荐
- spring web mvc中遇到的错误以及学习小记(持续记录)
错误:cvc-complex-type.2.4.a: 发现了以元素 'init-param' 开头的无效内容.应以 '{"http://java.sun.com/xml/ns/javaee& ...
- 学习的目的:理解<转>
http://www.hkuspacechina.com/chs/news-and-events/news/detail/news-first-day-of-school-2015-04-23 学习的 ...
- jQuery Validate + Ckeditor 驗證 textarea 解決方式
jQuery Validate + Ckeditor 驗證 textarea 解決方式 html <textarea name="content" id="cont ...
- 答:SQLServer DBA 三十问之三:有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理
3. 有哪些操作会使用到TempDB:如果TempDB异常变大,可能的原因是什么,该如何处理: tempdb的用途:1)存储专用和全局临时变量,不考虑数据库上下文: 2)与Order by 子句,游标 ...
- 转:认识MyBean
1. 初步体验 我们先看一个框架自带的例子,以增加感性认识.打开samples\singleDEMO示例项目.这个示例演示了在一个EXE程序内,使用插件的概念调用两个窗口.其中包括一个主窗体 ufrm ...
- shellinabox基于web浏览器的终端模拟器
1. Shellinabox介绍 Shellinabox 是一个利用 Ajax 技术构建的基于 Web 浏览器的远程终端模拟器,也就是说安装了该软件之后,服务器端不需要开启 ssh服务,通过 Web ...
- Hibernate多对多双向关联
以Student和Course为例,一个学生可以选多门课程,一门课程也可以被多个学生选取: 持久化类Student: package bean; import java.util.Set; publi ...
- MySQL中存储过程+事件的使用方法
一.背景 将界面操作日志存储在MySQL数据库中的operationlog表中,如果该表不能自动备份,表中的数据会越来越多,影响速度.可以定期将表中数据备份到另外一个表中来解决. 二.解决方案 1.使 ...
- Python 2.7_发送简书关注的专题作者最新一篇文章及连接到邮件_20161218
最近看简书文章关注了几个专题作者,写的文章都不错,对爬虫和数据分析都写的挺好,因此想到能不能获取最新的文章推送到Ipad网易邮箱大师.邮件发送代码封装成一个函数,从廖雪峰大神那里学的 http:// ...
- Ionic打包过程下载Gradle失败的解决方法
安卓应用现在很多都是基于gradle进行大包,ionic默认的打包命令 cordova build --release android 就是使用gradle进行打包,但同时ionic也支持in ...