相關關鍵詞
關于我們
最新文章
Thinkphp3.2實用篇之計算型驗證碼示例
是不是覺得普通的驗證碼已經沒辦法滿足,接下來介紹如何將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; // 驗證碼創(chuàng)建時間 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); }