Thinkphp3.2實(shí)用篇之計(jì)算型驗(yàn)證碼示例
是不是覺(jué)得普通的驗(yàn)證碼已經(jīng)沒(méi)辦法滿足,接下來(lái)介紹如何將tp現(xiàn)有的驗(yàn)證碼改為計(jì)算型驗(yàn)證碼:
首先找到: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);
// 設(shè)置背景
imagecolorallocate($this->_image, $this->bg[0], $this->bg[1], $this->bg[2]);
// 驗(yàn)證碼字體隨機(jī)顏色
$this->_color = imagecolorallocate($this->_image, mt_rand(1,150), mt_rand(1,150), mt_rand(1,150));
// 驗(yàn)證碼使用隨機(jī)字體
$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) {
// 繪雜點(diǎn)
$this->_writeNoise();
}
if ($this->useCurve) {
// 繪干擾線
$this->_writeCurve();
}
// 繪驗(yàn)證碼
$code = array(); // 驗(yàn)證碼
$symbol=array('+','-');
$codeNX = 0; // 驗(yàn)證碼第N個(gè)字符的左邊距
$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]);
}
}
// 保存驗(yàn)證碼
$key = $this->authcode($this->seKey);
$str=implode('', $code);
eval("\$re=$str;");
$code = $this->authcode($re);
$secode = array();
$secode['verify_code'] = $code; // 把校驗(yàn)碼保存到session
$secode['verify_time'] = NOW_TIME; // 驗(yàn)證碼創(chuàng)建時(shí)間
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;
// 驗(yàn)證碼不能為空
$secode = session($key);
if($code===false || empty($secode)) {
return false;
}
//驗(yàn)證碼是否是數(shù)字
if(!is_numeric($code)) {
return false;
}
// session 過(guò)期
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();
}
驗(yàn)證方法:
if (!check_verify($verify,'','add')) {
$this->error('驗(yàn)證碼錯(cuò)誤!');
return;
}
調(diào)用的公共方法:
// 檢測(cè)輸入的驗(yàn)證碼是否正確,$code為用戶輸入的驗(yàn)證碼字符串
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);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- thinkphp5.1驗(yàn)證碼及驗(yàn)證碼驗(yàn)證功能的實(shí)現(xiàn)詳解
- tp5(thinkPHP5框架)captcha驗(yàn)證碼配置及驗(yàn)證操作示例
- ThinkPHP5.0框架驗(yàn)證碼功能實(shí)現(xiàn)方法【基于第三方擴(kuò)展包】
- thinkPHP5.0框架驗(yàn)證碼調(diào)用及點(diǎn)擊圖片刷新簡(jiǎn)單實(shí)現(xiàn)方法
- thinkPHP實(shí)現(xiàn)的驗(yàn)證碼登錄功能示例
- thinkphp3.2實(shí)現(xiàn)在線留言提交驗(yàn)證碼功能
- ThinkPHP實(shí)現(xiàn)生成和校驗(yàn)驗(yàn)證碼功能
- thinkPHP中驗(yàn)證碼的簡(jiǎn)單實(shí)現(xiàn)方法
- ThinkPHP5&5.1實(shí)現(xiàn)驗(yàn)證碼的生成、使用及點(diǎn)擊刷新功能示例
相關(guān)文章
Netbeans 8.2與PHP相關(guān)的新特性介紹
Netbeans 8.2在10月1日國(guó)慶節(jié)發(fā)布了,下面通過(guò)本文給大家介紹與php相關(guān)的新特征,一起看看吧2016-10-10
PHP7使用ODBC連接SQL Server2008 R2數(shù)據(jù)庫(kù)示例【基于thinkPHP5.1框架】
這篇文章主要介紹了PHP7使用ODBC連接SQL Server2008 R2數(shù)據(jù)庫(kù),結(jié)合實(shí)例形式分析了基于thinkPHP5.1框架使用ODBC連接SQL Server2008數(shù)據(jù)庫(kù)相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
PHP+Memcache實(shí)現(xiàn)wordpress訪問(wèn)總數(shù)統(tǒng)計(jì)(非插件)
這篇文章主要介紹了PHP+Memcache實(shí)現(xiàn)wordpress訪問(wèn)總數(shù)統(tǒng)計(jì),直接寫在主題functions.php中,并非實(shí)現(xiàn)的一個(gè)插件,需要的朋友可以參考下2014-07-07
使用PHP實(shí)現(xiàn)一個(gè)輕量級(jí)HTML模板引擎
在Web開(kāi)發(fā)中,我們經(jīng)常需要?jiǎng)討B(tài)生成HTML頁(yè)面,為了提高開(kāi)發(fā)效率和代碼可維護(hù)性,使用模板引擎是一個(gè)非常普遍的方案,本文將介紹如何使用PHP實(shí)現(xiàn)一個(gè)簡(jiǎn)單的HTML模板引擎,滿足變量綁定輸出和if判斷的需求,需要的朋友可以參考下2023-08-08
使用xampp搭建運(yùn)行php虛擬主機(jī)的詳細(xì)步驟
這篇文章主要介紹了通過(guò)使用xampp搭建運(yùn)行php虛擬主機(jī)的步驟,介紹很詳細(xì),感興趣的小伙伴們可以參考一下2015-10-10
國(guó)產(chǎn)PHP開(kāi)發(fā)框架myqee新手快速入門教程
這篇文章主要介紹了國(guó)產(chǎn)PHP開(kāi)發(fā)框架myqee新手快速入門教程,myqee中文名稱邁啟PHP框架,有比較多的高級(jí)開(kāi)發(fā)特性,需要的朋友可以參考下2014-07-07
laravel5.1框架model類查詢的實(shí)現(xiàn)方法
今天小編就為大家分享一篇laravel5.1框架model類查詢的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
Laravel 集成微信用戶登錄和綁定的實(shí)現(xiàn)
這篇文章主要介紹了Laravel 集成微信用戶登錄和綁定的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

