是不是觉得普通的验证码已经没办法满足,接下来介绍如何将tp现有的验证码改为计算型验证码:

首先找到:ThinkPHP\Library\Think\Verify.class.php
在其中加入以下代码:
public function entry_add($id = '') {
$this->length='3';
// 图片宽(px)
$this->imageW || $this->imageW = $this->length*$this->fontSize*1.5 + $this->length*$this->fontSize/2;
// 图片高(px)
$this->imageH || $this->imageH = $this->fontSize * 2.5;
// 建立一幅 $this->imageW x $this->imageH 的图像
$this->_image = imagecreate($this->imageW, $this->imageH);
// 设置背景
imagecolorallocate($this->_image, $this->bg[0], $this->bg[1], $this->bg[2]);
// 验证码字体随机颜色
$this->_color = imagecolorallocate($this->_image, mt_rand(1,150), mt_rand(1,150), mt_rand(1,150));
// 验证码使用随机字体
$ttfPath = dirname(__FILE__) . '/Verify/' . ($this->useZh ? 'zhttfs' : 'ttfs') . '/';
if(empty($this->fontttf)){
$dir = dir($ttfPath);
$ttfs = array();
while (false !== ($file = $dir->read())) {
if($file[0] != '.' && substr($file, -4) == '.ttf') {
$ttfs[] = $file;
}
}
$dir->close();
$this->fontttf = $ttfs[array_rand($ttfs)];
}
$this->fontttf = $ttfPath . $this->fontttf;
if($this->useImgBg) {
$this->_background();
}
if ($this->useNoise) {
// 绘杂点
$this->_writeNoise();
}
if ($this->useCurve) {
// 绘干扰线
$this->_writeCurve();
}
// 绘验证码
$code = array(); // 验证码
$symbol=array('+','-');
$codeNX = 0; // 验证码第N个字符的左边距
$now_symbol=$symbol[rand(0,1)];
for ($i = 0; $i<$this->length; $i++) {
if($i==1){
$code[$i] = $now_symbol;
$codeNX += mt_rand($this->fontSize*1.2, $this->fontSize*1.6);
imagettftext($this->_image, $this->fontSize,0, $codeNX, $this->fontSize*1.6, $this->_color, $ttfPath.'2.ttf', $code[$i]);
}
else{
$code[$i] = $this->codeSet[mt_rand(0, strlen($this->codeSet)-1)];
$codeNX += mt_rand($this->fontSize*1.2, $this->fontSize*1.6);
imagettftext($this->_image, $this->fontSize, mt_rand(-40, 40), $codeNX, $this->fontSize*1.6, $this->_color, $this->fontttf, $code[$i]);
}
}
// 保存验证码
$key = $this->authcode($this->seKey);
$str=implode('', $code);
eval("\$re=$str;");
$code = $this->authcode($re);
$secode = array();
$secode['verify_code'] = $code; // 把校验码保存到session
$secode['verify_time'] = NOW_TIME; // 验证码创建时间
session($key.$id, $secode);
header('Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header("content-type: image/png");
// 输出图像
imagepng($this->_image);
imagedestroy($this->_image);
}
public function check_add($code, $id = '') {
$key = $this->authcode($this->seKey).$id;
// 验证码不能为空
$secode = session($key);
if($code===false || empty($secode)) {
return false;
}
//验证码是否是数字
if(!is_numeric($code)) {
return false;
}
// session 过期
if(NOW_TIME - $secode['verify_time'] > $this->expire) {
session($key, null);
return false;
}
if($this->authcode($code) == $secode['verify_code']) {
$this->reset && session($key, null);
return true;
}
return false;
}
生成方法:
Public function verify(){
import('ORG.Util.Verify');
$Verify = new Verify();
$Verify->useNoise = true;
$Verify->codeSet = '0123456789';
$Verify->useCurve = false;
$Verify->entry_add();
}
验证方法:
if (!check_verify($verify,'','add')) {
$this->error('验证码错误!');
return;
}
调用的公共方法:
// 检测输入的验证码是否正确,$code为用户输入的验证码字符串
function check_verify($code, $id = '',$type=''){
import('ORG.Util.Verify');
$verify = new Verify();
if($type='add'){
return $verify->check_add($code, $id);
}
else{
return $verify->check($code, $id);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# thinkphp3.2
# 验证码
# thinkphp
# thinkphp计算型验证码
# thinkphp5.1验证码及验证码验证功能的实现详解
# tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
# ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
# thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
# thinkPHP实现的验证码登录功能示例
# thinkphp3.2实现在线留言提交验证码功能
# ThinkPHP实现生成和校验验证码功能
# thinkPHP中验证码的简单实现方法
# ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例
# 没办法
# 一幅
# 如何将
# 大家多多
# 为空
# 是否正确
# 校验码
# 验证码错误
# ttfs
# zhttfs
# dir
# fontttf
# empty
# dirname
# ttfPath
# mt_rand
# useZh
# array
# _background
相关文章:
如何快速生成橙子建站落地页链接?
建站主机功能解析:服务器选择与快速搭建指南
如何通过多用户协作模板快速搭建高效企业网站?
建站主机是什么?如何选择适合的建站主机?
网站制作说明怎么写,简述网页设计的流程并说明原因?
Android滚轮选择时间控件使用详解
如何选择美橙互联多站合一建站方案?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
建站之星安装路径如何正确选择及配置?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
如何用IIS7快速搭建并优化网站站点?
c++ stringstream用法详解_c++字符串与数字转换利器
定制建站策划方案_专业建站与网站建设方案一站式指南
建站之星后台密码遗忘如何找回?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
开源网站制作软件,开源网站什么意思?
建站之星导航菜单设置与功能模块配置全攻略
如何用免费手机建站系统零基础打造专业网站?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何在云主机上快速搭建网站?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何基于云服务器快速搭建网站及云盘系统?
如何在宝塔面板中创建新站点?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
淘宝制作网站有哪些,淘宝网官网主页?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
建站之星价格显示格式升级,你的预算足够吗?
如何在香港服务器上快速搭建免备案网站?
建站主机如何选?高性价比方案全解析
建站之星免费版是否永久可用?
在线教育网站制作平台,山西立德教育官网?
如何通过商城自助建站源码实现零基础高效建站?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何在香港免费服务器上快速搭建网站?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
浅析上传头像示例及其注意事项
如何通过FTP空间快速搭建安全高效网站?
如何在云服务器上快速搭建个人网站?
如何在阿里云服务器自主搭建网站?
建站之星会员如何解锁更多建站功能?
如何快速查询网址的建站时间与历史轨迹?
如何通过山东自助建站平台快速注册域名?
实例解析Array和String方法
制作网页的网站有哪些,电脑上怎么做网页?
如何在Ubuntu系统下快速搭建WordPress个人网站?
重庆市网站制作公司,重庆招聘网站哪个好?
*请认真填写需求信息,我们会在24小时内与您取得联系。