Think\Verify类可以支持验证码的生成和验证功能。

为了显示这个验证码功能,第一要有控制器,再就是有方法,然后是显示的页面。

一、最简单的方式生成验证码

(1)我们还是继续在那个控制器编写方法

这个方法显示这个验证码的页面

public function xianshi()
{
$this->show();
}
public function shengcheng()
{
//造验证码的对象
$v = new \Think\Verify();
//生成验证码
$v->entry();
}

(2)显示验证码的页面,还是放在中,命名为

<img src="__CONTROLLER__/shengcheng" />

运行一下看下结果~~

(3)我们还可以给他设置大小,每刷新一次页面,验证码都会改变

只要给他个属性就可以了,例如

<img src="__CONTROLLER__/shengcheng" width="300" height="100" />

宽和高都变大

二、文本框输入验证码(让文本框输入的验证码和显示的验证码是否匹配)

(1)先要在显示页面做一个文本框,来显示用户看到的内容

<img src="__CONTROLLER__/shengcheng" width="300" height="100" />
<div>请输入验证码:<input type="text" name="yzm" /></div>

我们也要做一个提示的行:用来显示提示信息

<span id="tishi"></span>  

(2)用ajax来做这个事件

失去焦点时触发事件

<script type="text/javascript">
$("#yzm").blur(function(){
var yzm = $(this).val(); //找到这个文本框中的值
$.ajax({
url:"__ACTION__", //发送给他自己
data:{yzm:yzm}, //将文本框中的值传过去
type:"POST", //传输方式
dataType:"TEXT",
success: function(data){
                  //返回成功后的操作
}
})
})
</script>

(3)在控制器中显示xianshi方法中的判断验证码是不是正确

public function xianshi()
{
if(empty($_POST))
{
$this->show(); //显示页面
}
else
{
//验证验证码是否正确,可以用Think\Verify类的check方法检测验证码的输入是否正确
$yzm = $_POST["yzm"]; //接收传过来的文本框的值
$v = new \Think\Verify();
if($v->check($yzm)) //验证完是有返回值的,所以我们可以用if判断一下
{
$this->ajaxReturn("ok","eval"); //输入正确返回ok
}
else
{
$this->ajaxReturn("no","eval"); //输入错误返回no
}
}
}

(4)ajax中返回成功地方的书写

success: function(data){
if(data.trim()=="ok")
{
//返回成功过就输出提示信息
$("#tishi").html("验证通过!");
$("#tishi").css("color","green");
}
else
{
//否则就返回错误的提示信息
$("#tishi").html("验证码输入错误!");
$("#tishi").css("color","red");
}
}

下面就是运行的实验了:

首先是输入正确的验证码,提示正确的信息

输入错误或是没有输入时,就会提示错误信息

三、如果一个页面有两个验证码

(1)这样显示的页面要有一个验证码显示的地方,里面的方法我们是shengcheng1

<img src="__CONTROLLER__/shengcheng1" width="300" height="100" />

(2)控制器的方法也要写个shengcheng1

public function shengcheng1()
{
  //造验证码的对象
  $v = new \Think\Verify();
  //生成验证码,标识是2
  $v->entry(2);
}  

注意:如果有两个验证码,就要进行标识,让他们知道是谁的验证码

这样第一个方法也要加标识

public function shengcheng()
{
  //造验证码的对象
  $v = new \Think\Verify();
  //生成验证码,标识是1
  $v->entry(1);
}

然后在check方法中写入一个标识,就是要验证哪一个的标识,这里我们要验证第二个吧

if($v->check($yzm,2))  //check的参数,一个是文本框中的值,第二个参数就是那个标识
{
$this->ajaxReturn("ok","eval"); //输入正确返回ok
}
else
{
$this->ajaxReturn("no","eval"); //输入错误返回no
}

看下结果,输入第二个验证码

四、验证码的变换

想要变换验证码的图片,其实就是重新请求那个生成验证码的方法就可以了

(1)先要把调换验证码的图片起个名字,如下

<img src="__CONTROLLER__/shengcheng1" width="300" height="100" id="img2" />

(2)然后就是给这个图片添加点击事件,修改属性就可以了

$("#img2").click(function(){
  //修改一些属性就可以了,修改src的属性
  $(this).attr("src","__CONTROLLER__/shengcheng1");
})

运行看下结果,点击一次就会变图片

     

注意:有时候浏览器不同也会有bug,所以我们要加一个东西,让它适应任何的浏览器,可以这样写

$("#img2").click(function(){
var sj = Math.random(); //生成随机数
var sz = sj.toFixed(2); //取小数点后两位
//修改一些属性就可以了,修改src的属性
$(this).attr("src","__CONTROLLER__/shengcheng1/a"+sz); //拼接上截取后的随机数
})

这样IE浏览器也是可以换图的了

五、其他的关于验证码的参数

这些参数都可以给验证码有些变换

注意:参数的设置有两种方法

一是实例化传入参数:

$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/zhttfs/ 目录下面

加入字体后,可以设置出现中文的验证码了:

public function shengcheng1()
{
//造验证码的对象
$v = new \Think\Verify();
$v->fontSize = 50;
$v->length = 2;
//$v->fontttf = "6.ttf"; //使用定义好的字体
$v->useZh = true; //使用中文字体
//生成验证码,标识是2
$v->entry(2); }

到此结束,验证码的功能~~~  

验证码所用的所有字符,都是存在它的父类中的,有空可以看下~~~

ThinkPhp框架:验证码功能的更多相关文章

  1. thinkphp框架验证码验证一次

    做异步验证验证码,只要验证一次结果正确,拿相同的值再次来对比,返回结果就不正确.我看到论坛中有人说,tp框架只要验证过一次正确后验证码就销毁了.确实是这个效果,但具体的还没深入了解

  2. 阿里大于验证码发送 (ThinkPhp框架)

    1.登录平台 阿里大于2.登陆之后我们可以看到资费,使用场景等,在进入正题之前我们需要一些准备工作,首先我们先了解下短信的请求参数,在这里我们需要注意的是sms_param这个参数,在接下来我们申请短 ...

  3. 用thinkPHP实现验证码的功能

    许多系统的登录都有验证码,而如果使用thinkPHP框架搭建网站的话,验证码的生成和验证就比较容易了 1.生成验证码 thinkPHP有对应生成验证码的方法 要使用验证码,需要导入扩展类库中的ORG. ...

  4. <转>用thinkPHP实现验证码的功能

    许多系统的登录都有验证码,而如果使用thinkPHP框架搭建网站的话,验证码的生成和验证就比较容易了 1.生成验证码 thinkPHP有对应生成验证码的方法 要使用验证码,需要导入扩展类库中的ORG. ...

  5. 采用thinkphp框架实现添加管理员功能

    最近由于忙于期中和期末考试没有写新的随笔了,另外内心也在纠结要不要考研,直到昨天终于痛下决心,才突然间觉得豁然开朗. 由于做老师留的课程设计作业采用thinkPHP框架频繁,最近的几篇随笔将都从thi ...

  6. Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一)

    原文:Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一) 拓展压缩包的使用方式详细介绍 1:将拓展包解压:ThinkPHP3.1.2_Extend.zip   --> 将其下的 \ ...

  7. 制作类似ThinkPHP框架中的PATHINFO模式功能(二)

    距离上一次发布的<制作类似ThinkPHP框架中的PATHINFO模式功能>(文章地址:http://www.cnblogs.com/phpstudy2015-6/p/6242700.ht ...

  8. 【ThinkPHP框架学习 】(1) --- thinkphp 3.2.3 验证码验证使用教程分享

    框架版本:ThinkPHP框架     thinkphp 3.2.3 生成验证码 下面是最简单的方式生成验证码: $Verify = new \Think\Verify(); $Verify-> ...

  9. Tornado框架实现图形验证码功能

    图形验证码是项目开发过程中经常遇到的一个功能,在很多语言中都有对应的不同形式的图形验证码功能的封装,python 中同样也有类似的封装操作,通过绘制生成一个指定的图形数据,让前端HTML页面通过链接获 ...

随机推荐

  1. 【Scala】Scala之Control Structures

    一.前言 前面学习了Scala的Numbers,接着学习Scala的Control Structures(控制结构). 二.Control Structures Scala中的控制结构与Java中的颇 ...

  2. Java多线程基础——Lock类

    之前已经说道,JVM提供了synchronized关键字来实现对变量的同步访问以及用wait和notify来实现线程间通信.在jdk1.5以后,JAVA提供了Lock类来实现和synchronized ...

  3. 学习计划——巩固基础+进阶练习

    时间:2016/3/23---24 内容:如何用CSS进行网页布局  课程复习 目标:完成一个demo+完成一篇学习心得博客 时间:2016/3/25---26 内容:网页布局基础  课程复习 目标: ...

  4. SysLog简介和java操作实例

    什么是SysLog syslog协议属于一种主从式协议:syslog发送端会传送出一个小的文字讯息(小于1024字节)到syslog接收端.接收端通常名为“syslogd”.“syslog daemo ...

  5. Modelbuilder快速入门

    Modelbuilder快速入门 by 李远祥 什么是modelbuilder 模型构建器是一个用来创建.编辑和管理模型的应用程序.模型是将一系列地理处理工具串联在一起的工作流,它将其中一个工具的输出 ...

  6. 从C#到TypeScript - 变量

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

  7. asp.net core mvc权限控制:在视图中控制操作权限

    在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式 ...

  8. asp.net core mvc权限控制:分配权限

    前面的文章介绍了如何进行权限控制,即访问控制器或者方法的时候,要求当前用户必须具备特定的权限,但是如何在程序中进行权限的分配呢?下面就介绍下如何利用Microsoft.AspNetCore.Ident ...

  9. IP数据报格式 及路由转发算法

    ip数据报分首部和数据两部分组成: 首部分为固定部分和可变部分 版本--占 4 位,指 IP 协议的版本 目前的 IP 协议版本号为 4 (即 IPv4) 首部长度--占 4 位,可表示的最大数值 是 ...

  10. java-9 异常处理

    1.异常处理的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如 ...