PHP 生成问答型验证码
2年前
阅读 5347
评论 0
喜欢 1
###核心代码:
```php
// +----------------------------------------------------------------------
// | 小黄牛MVC框架 - Vendor - Chify - 内置问答验证类
// +----------------------------------------------------------------------
// | $vif = new Chify();
// | $vif->upd($array,60);
// | echo $vif->entry();
// +----------------------------------------------------------------------
// | Copyright (c) 2016 www.junphp.com
// +----------------------------------------------------------------------
// | Author: 冯俊豪 - 小黄牛 <1731223728@qq.com>
// +----------------------------------------------------------------------
header("Content-type:text/html;charset=utf-8");
class Chify {
// 验证码的SESSION下标
public static $seKey = '';
private $Expire = 60; // 验证码过期时间,单位:秒
private $Array;//问答参数
/*
* 初始化参数
*/
public function __construct(){
$this->Array = array(
array(1=>'JunPHP框架作者是?',2=>'冯俊豪',3=>true),
array(1=>'JunPHP框架是开源的吗?',2=>'是',3=>true),
array(1=>'JunPHP官网是?',2=>'www.junphp.com',3=>true),
array(1=>'3+2等于几?',2=>'5'),
);
}
/**
* 输出验证码;
*/
public function entry() {
return $this->Interlocution();
}
/*
* 修改参数
* $Array : 对应的验证码与提示
* $Expire : 验证码过期时间,默认60秒
*/
public function upd($Array,$Expire=60){
$this->Array = array_merge($this->Array,$Array);
$this->Expire = $Expire;
}
/*
* 生成验证码
*/
public function Interlocution() {
$rand = rand(0,count($this->Array)-1); //获得随机问答词条
if(!empty($this->Array[$rand][3])){
$title = $this->Array[$rand][1].' 请回答: '.$this->Array[$rand][2];
}else{
$title = $this->Array[$rand][1];
}
$this->_session($this->Array[$rand][2]); //将答案存入session中
return $title;
}
/**
* 验证码保存
*/
protected function _session($code) {
// 保存验证码
isset($_SESSION) || session_start();
if(is_array($code)){
$_SESSION[self::$seKey]['code'] = join('', $code); // 把校验码保存到session
}else{
$_SESSION[self::$seKey]['code'] = $code;
}
$_SESSION[self::$seKey]['time'] = time(); // 验证码创建时间
}
/**
* 验证验证码是否正确
* $code :用户验证码
* 返回验证码是否正确 TRUE || FALSE
*/
public function check($code) {
isset($_SESSION) || session_start();
// 验证码不能为空
if(empty($code) || empty($_SESSION[self::$seKey])) {
return false;
}
// session 过期
if(time() - $_SESSION[self::$seKey]['time'] > $this->Expire) {
unset($_SESSION[self::$seKey]);
return false;
}
if($code == $_SESSION[self::$seKey]['code']) {
return true;
}
return false;
}
}
```
###调用方法:
```php
//引入验证码文件
include 'Chify.class.PHP';
//实例化验证码类
$vif = new Chify();
//生成验证码
echo $vif->entry();
/*
//array (1=>'问题',2=>'答案',3=>'是否显示答案')
$array = array(
array(1=>'JunPHP框架作者是?',2=>'冯俊豪',3=>true),
array(1=>'3+2等于几?',2=>'5'),
);
//修改参数,第二个参数为验证码过期时间,默认为60秒
$vif->upd($array,100);
//生成验证码
echo $vif->entry();
*/
/*
//验证码效验
if ($vif->check($_POST['NAME名'])) {
真
}else{
假
}
*/
```
###案例下载地址:
[PHP 生成问答型验证码 - 20160928092403.zip](https://www.junphp.com/Blog/JunUE/php/dwfile/20160928092403.zip "PHP 生成问答型验证码 - 20160928092403.zip")
© 著作权归作者所有