thinkphp验证码功能

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);

}
时间: 2024-08-09 06:17:20

thinkphp验证码功能的相关文章

使用thinkphp3.2中的验证码功能

为了网站的安全性,使用验证码技术是比较常见的,今天按照thinkphp3.2完全开发手册的例子试了一下(地址http://document.thinkphp.cn/manual_3_2.html#verify),总是报错,没法显示验证码,原因原来是在PHP.INI文件中没有打开GD库. 只要将配置文件PHP.INI中的extension=php_gd2.dll注释去掉就可以了(php_gd2.dll   GD 库图像函数库 GD2). 生成验证码 public function code() {

验证码功能

验证码功能 ① 在Public控制器中定义verify方法 ② 设置验证码相关参数 codeSet:显示的字符串 useZh:是否使用中文验证码 zhSet:显示的中文字符串 useImgBg:是否使用图片背景 fontSize:字体大小 useCurve:是否使用混淆线 useNoise:是否使用杂点 length:验证码采用多少个字符 fontttf:使用的字体样式 ③ 中文验证码 运行结果: 为什么会出现以上问题? 答:因为还没有提供任何中文字体,必须到系统字体目录中复制黑体常规到Thin

thinkphp验证码实现。

作为我大天朝的程序员,如果不会点thinkphp框架确实有点说不过去了.不过不会也没关系,很简单的一个php框架.今天为大家介绍的是thinkphp如何实现验证码的功能. thinkphp自带验证码功能,我们直接调用就行了.发展到现在thinkphp已经有好几个正式版本了,最新的版本是thinkphp5.0.今天我将给大家介绍一下5的版本和3的版本. thinkphp3的版本: 第一步:在我们相对应的控制器创建一个输出验证码方法 public function verify() { $Verif

java web中图片验证码功能实现

用户在注册网站信息的时候基本上都要数据验证码验证.那么图片验证码功能该如何实现呢? 大概步骤是: 1.在内存中创建缓存图片 2.设置背景色 3.画边框 4.写字母 5.绘制干扰信息 6.图片输出 废话不多说,直接上代码 package com.lsgjzhuwei.servlet.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buffer

简单 验证码 功能

在贴代码之前首先简述一下验证验证码原理:随机获取验证码的值,把这个值存到session中,其作用可想而知就是要拿来跟前台数据作比较,通过Graphics将值进行模糊处理之后传到前台页面展示. 1 package com.skss.util; 2 3 4 import java.awt.Color; 5 import java.awt.Font; 6 import java.awt.Graphics; 7 import java.awt.image.BufferedImage; 8 import

ThInkPHP验证码不显示,解决方法汇总

出现ThInkPHP验证码不显示的情况 官方提示如下:如果无法显示验证码,请检查:① PHP是否已经安装GD库支持:② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出):(打开验证码文件为乱码,也有可能是BOM编码,可查看下方2寻找解决方法)③ Image类库是否正确导入:④ 如果是中文验证码检查是否有拷贝字体文件到类库所在目录: ⑤URL_MODEL模式,有些服务器不支持REWRITE . 针对上面的情况,一一检查 1.可以用phpinfo 查看GD库是否开启,phpinfo打印出

使用JS来实现验证码功能

最近想为自己的Django博客添加验证码功能,本来想使用第三方库来实现的,不过考虑到添加第三方库对性能的影响,以及第三方库是否安全可靠的问题,还是用自己的代码来实现吧.反正用JS来实现验证码功能又不是很难. 简单来说,用一个create_code()方法在页面中生成验证码,然后control_submit()方法检测验证码文本框(id="user_input_code")的键盘输入事件,当文本框输入了超过4个字符后,调用verify_code ()检测输入的字符与生成的验证码是否一致,

JavaScript 实现验证码功能

1.编写用户登录界面 根据需要自行完成,参见用户注册与登录设计. 2.编写实现验证码JavaScript脚本 <head> <script language="javascript" type="text/javascript"> var code ; //在全局 定义验证码 function createCode(){   //产生验证码函数 code = new Array(); var codeLength = 4;//验证码的长度 v

自己实现一个验证码功能

用Servlet技术实现验证码功能,(画出一个验证码) 公司中一般用写好的验证码(jar包),很少使用自己去画验证码 . package chensi.com; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import j