Thinkphp 验证码

一.生成验证码

$Verify = new \Think\Verify();
$Verify->entry();

生成的验证码信息会保存到session中,里面包含数据有:

array('verify_code'=>'当前验证码的值','verify_time'=>'验证码生成的时间戳')

如果需要在一个页面中生成多个验证码的话,entry方法中需要传入可标识的信息,例如

// 验证码1
$Verify = new \Think\Verify();
$Verify->entry(1);
// 验证码2
$Verify = new \Think\Verify();
$Verify->entry(2);

验证码参数

可以对生成的验证码设置相关的参数,

//设置验证码参数
 $config = array( 'fontSize'=>30, //验证码字体大小 
'length'=>3, //验证码位数
 'useNoise'=>false,//关闭验证码杂点 
); //实例化验证码类,并传入参数
$verify = new Verify($config); //生成验证码 $verify->entry();

上面,采用的配置变量方式来修改验证码参数,也可以使用动态设置方法:

//实例化验证码类,并传入参数
 $verify = new Verify(); 

//验证码字体大小 
$verify->fontSize = 30;

 //验证码位数 $verify->length = 3; 

//关闭验证码杂点
 $verify->useNoise = false; 

//设置验证码字体 
 $verify->fontttf = '5.ttf';

//设置背景图片功能,随机使用 
$verify->useImgBg = true;

//取消曲线混淆 
$verify->useCurve = false;

//设置验证码的高 
$verify->imageH = 100; 

//设置验证码的宽 
$verify->imageW = 100;

//设置验证码的长度 
$verify->length = 3;

//设置验证码加密密钥 
$verify->seKey = 'YCKU.COM';

//设置验证码背景颜色 
$verify->bg = array(200,200,200);
//生成验证码 
$verify->entry();

如果想让验证码显示中文字符,那么需要几个步骤:

1.在 Think/zhttfs 文件夹下引入中文字体文件,比如加粗雅黑 msyhbd.ttf;

2.设置字体文件;

//设置验证码字体

$verify->fontttf = 'msyhbd.ttf';

3.设置中文验证码

//设置中文验证码

$verify->useZh = true;

PS:由于中文字符较为庞大,你也可以限定指定的中文字符。

//限定中文字符

$verify->zhSet = 'xxx是个好人';

//设置纯数字

$verify->codeSet='0123456789';

 

二、生成验证码例子:

YzController.class.php

<?php
namespace Yz\Controller;
use Think\Controller;
class YzController extends Controller
{
    public function xianshi()
    {
        $yz = $_POST["uid"];
        if(empty($yz))//如果传过来的$_POST值为空,显示页面
        {
            $this->show();    
        }    
        else//如果不为空,显示验证码
        {
            $verify = new \Think\Verify(); 
            //如果验证成功,返回true,失败false   
             if($verify->check($yz/*, $id*/))//$id为验证码的标识,在$Verify->entry();中没有定义标识,不写
            {
                echo "注册成功!";    
            }    
        }            
    }
    public function yzm()//生成验证码方法
    {
        $Verify = new \Think\Verify(); 
        $Verify->fontSize = 30;//验证码字体大小
        $Verify->length   = 5;//验证码字体的长度
        $Verify->fontttf   = '5.ttf';//指定用那种字体
        $Verify->length   = 5;
        $Verify->entry();
    }
    public function _empty()//空方法,防止报错
    {
        $this->display('Empty/empty');    
    }    
}
View Code

xianshi.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script>
<title>无标题文档</title>
</head>

<body>
<form action="__ACTION__" method="post">
<div><input type="text" id="yz" name="uid" />
<img id="img" src="__CONTROLLER__/yzm" />
</div>
<div><input type="submit" value="验证" id="btn" /></div>
</form>
<script type="text/javascript">
//点击图片,定义src,再走一遍方法,BUG是个别浏览器不兼容,可生成随机数,当参数传值
$("#img").click(function(){
    var a = Math.ceil(Math.random()*100);//生成随机数,Math.random()是生成随机数,Math.ceil()是向上取整,Math.ceil(Math.random())都是取整到1,可以*100来生成1-100的随机整数
    alert(a);
    $("#img").attr("src","__CONTROLLER__/yzm/suijishu/"+a+"");//个别浏览器如果地址一样,不加载,可以后带参数(生成随机数)    
})
</script>
</body>
</html>
View Code

 



posted on 2016-12-28 12:38  向前看!明天会更好!  阅读(155)  评论(0编辑  收藏  举报