您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何在PHP中利用session與gd庫實現一個驗證碼生成功能,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
驗證碼是為了防止機器灌水給網站帶來污染以及增加服務器負擔而出現的。目前大大小小的網站都有驗證碼。今天自己實現了一個簡單的驗證碼類。說簡單是因為沒有加一些干擾的弧線等等,只是將文字旋轉了一下。當然,因為字體的原因,要想一眼看出來并不容易。同時,為了避免字母的大小寫與數字混淆,又去掉了那些看起來很像的字母數字。
類:
<?php /** *簡單生成驗證碼類 */ class Captcha { private $width;//驗證碼寬度 private $height;//驗證碼高度 private $countOfChars;//字符數 //private $distrubLines;//干擾線條數 private $chars;//隨機生成的字符串 public function __construct($width=100,$height=30,$countOfChars=4,$distrubLines=2) { //初始化參數 $this->width=$width; $this->height=$height; $this->countOfChars=$countOfChars; session_start(); } /** * 執行全部動作,生成驗證碼并直接輸出 */ public function execute(){ $imageHandle=$this->createImage(); $this->createChars(); $this->drawChars($imageHandle); $this->outImage($imageHandle); } /** * 創建畫布,并隨機填充顏色 * @return 返回畫布句柄 */ public function createImage(){ $imageHandle= imagecreate($this->width, $this->height); //隨機背景顏色 $randColor=imagecolorallocate($imageHandle, 50, mt_rand(0, 50), mt_rand(0, 50)); imagefill($imageHandle, 0, 0, $randColor); return $imageHandle; } /** * 生成隨機字符 */ private function createChars(){ //候選字符 $str='ABCDEFGHJKLMNPQRSTUVWXZabcdefghijkmnpqtuvwx2346789'; $chars=''; for($i=0;$i<$this->countOfChars;$i++){ $chars.=$str[mt_rand(0,strlen($str)-1)]; } $this->chars=$chars; //保存在會話中 $_SESSION['captcha']=strtolower($chars); } /** * 將字符寫入圖像 * @param type $imageHandle 圖像句柄 */ private function drawChars($imageHandle){ if($this->chars!=null){ $font='/home/WWW/YuWeiLiShuFT.ttf'; for($i=0;$i<strlen($this->chars);$i++){ $color= imagecolorallocate($imageHandle,mt_rand(50, 200),mt_rand(100, 255),255); imagefttext($imageHandle,30, 30,$i*20+10,25,$color,$font,$this->chars[$i]); } } } /** * 輸出圖像 * @param type $imageHandle 圖像句柄 */ private function outImage($imageHandle){ imagepng($imageHandle); imagedestroy($imageHandle); } /** * 判斷用戶輸入的驗證碼是否正確 * @param type $usrInput 用戶的輸入 * @return boolean 驗證碼是否匹配 */ public static function isRight($usrInput){ if(isset($_SESSION['captcha'])){ if(strtolower($usrInput)==$_SESSION['captcha']){ $_SESSION['captcha']=null; return true; }else{ $_SESSION['captcha']=null; return false; } } } }
把驗證設置成了靜態方法,因為生成驗證碼后已經把驗證碼存到了session中,驗證時直接調用靜態方法,而不需要實例化這個類了。
上面的字體可以隨意設置。
下面的代碼講返回一個圖像,實例化Captcha類后動態生成的一個圖像。(outCaptcha.php)
<?php require('Captcha.php'); $code= new Captcha(); header('Content-Type:image/png'); $code->execute();
header(‘Content-Type:image/png');
這句話的作用是告訴瀏覽器輸出的是png圖像,而不是html代碼。瀏覽器收到后就將下面的輸出解析成圖像。
然后寫一個html靜態頁面(testCaptcha.html),創建表單
<!DOCTYPE html> <html> <head> <title>驗證碼測試</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h2>請輸入驗證碼:</h2> <img src="outCaptcha.php"/> <form method="POST" action="prove.php"> <input type="text" name="input_captcha"/> <button name="submit">確定</button> </form> </body> </html>
僅僅是這樣是不夠的,看到表單提交的地址了么?那個就是用來驗證驗證碼是否輸入正確的代碼:
session_start(); $inputCaptcha= trim($_POST['input_captcha']); require('Captcha.php'); if(Captcha::isRight($inputCaptcha)){ echo '驗證碼正確'; }else{ echo '驗證碼錯誤或已過期'; } session_destroy();
關于如何在PHP中利用session與gd庫實現一個驗證碼生成功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。