Thinkphp3.2實(shí)用篇之計(jì)算型驗(yàn)證碼示例
是不是覺得普通的驗(yàn)證碼已經(jīng)沒辦法滿足,接下來(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)文章
解決laravel查詢構(gòu)造器中的別名問(wèn)題
今天小編就為大家分享一篇解決laravel查詢構(gòu)造器中的別名問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10CodeIgniter控制器之業(yè)務(wù)邏輯實(shí)例分析
這篇文章主要介紹了CodeIgniter控制器之業(yè)務(wù)邏輯使用方法,結(jié)合實(shí)例形式分析了業(yè)務(wù)邏輯所涉及的相關(guān)概念與具體使用方法,需要的朋友可以參考下2016-01-01PHP遞歸遍歷指定文件夾內(nèi)的文件實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇PHP遞歸遍歷指定文件夾內(nèi)的文件實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11YII中Ueditor富文本編輯器文件和圖片上傳的配置圖文教程
本文主要給大家介紹了YII中Ueditor富文本編輯器文件和圖片上傳的配置圖文教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03laravel框架模板之公共模板、繼承、包含實(shí)現(xiàn)方法分析
這篇文章主要介紹了laravel框架模板之公共模板、繼承、包含實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Laravel框架中公共模板的建立、模板包含、模板繼承等相關(guān)操作技巧,需要的朋友可以參考下2019-08-08PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十六)
這篇文章主要介紹了PHP網(wǎng)頁(yè)游戲Xnova(ogame)源碼解讀的攻擊任務(wù)頁(yè)面的代碼流程,需要的朋友可以參考下2014-06-06Zend Framework實(shí)現(xiàn)留言本分頁(yè)功能(附demo源碼下載)
這篇文章主要介紹了Zend Framework實(shí)現(xiàn)留言本分頁(yè)功能,詳細(xì)分析了Zend Framework實(shí)現(xiàn)留言本所涉及的控制器動(dòng)作,分頁(yè)樣式及模板調(diào)用技巧,并附代碼demo源碼供讀者下載參考,需要的朋友可以參考下2016-03-03