程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> John細說PHP的驗證碼,John細說PHP驗證碼

John細說PHP的驗證碼,John細說PHP驗證碼

編輯:關於PHP編程

John細說PHP的驗證碼,John細說PHP驗證碼


細說php中的驗證碼類創建

我這裡自己寫了一個驗證碼類,我來演示一下怎麼使用,我是菜鳥一枚,大神請略過。我來講解一下它的使用方法,總共需要兩步即可。

第一步:

下載我制作好的驗證碼類。下載地址:http://files.cnblogs.com/files/xfjpeter/Verify.zip

第二步:

 1.創建一個字的驗證碼文件

 1 <?php
 2 
 3 #引入驗證碼類文件
 4 require_once('Verify.class.php');
 5 
 6 #實例化驗證碼類
 7 #初始化的使用可以傳四個參數,分別是:驗證碼圖片的長、高,驗證碼的長度,驗證碼的類型(驗證碼的類型需要將bgRand屬性設置為false)
 8 $code = new Verify(140, 40, 6, 6);
 9 
10 #設置驗證碼圖片的長度
11 $code -> width = 200;
12 
13 #設置驗證碼圖片的高度
14 $code -> height = 60;
15 
16 #是否隨機背景,默認true(隨機)
17 $code -> bgRand = false;
18 
19 #顯示驗證碼
20 $code -> verify();

 生成的圖片樣式為如圖

 

2.驗證碼類文件為

  1 <?php
  2 
  3 /**
  4  * 驗證碼類
  5  * @author John <[email protected]>
  6  */
  7 class Verify
  8 {
  9     private $width = 160;       //驗證碼的寬度
 10     private $height = 60;       //驗證碼的高度
 11     private $type = 1;          //驗證碼的類型
 12     private $length = 4;        //驗證碼的長度
 13     private $code;              //驗證碼
 14     private $img;               //圖像的資源
 15     private $seKey = 'John';    //密鑰
 16     private $bgRand = true;     //隨機背景圖片
 17     
 18     /**
 19      * 構造函數
 20      * @param type $width 驗證碼的寬度
 21      * @param type $height 驗證碼的高度
 22      * @param type $length 驗證碼的長度
 23      * @param type $type 驗證碼的類型
 24      */
 25     public function __construct($width = 160, $height = 40, $length = 4, $type = 1)
 26     {
 27         $this->width  = !empty($width)  ? $width  : $this->width;
 28         $this->height = !empty($height) ? $height : $this->height;
 29         $this->length = !empty($length) ? $length : $this->length;
 30         $this->type   = !empty($type)   ? $type   : $this->type;
 31     }
 32     
 33     /**
 34      * 設置屬性值
 35      * @param type $name 屬性名
 36      * @param type $value 屬性值
 37      */
 38     public function __set($name, $value)
 39     {
 40         if (isset($name)) {
 41             $this->$name = $value;
 42         }
 43     }
 44     
 45     /**
 46      * 獲取屬性值
 47      * @param type $name 屬性名
 48      * @return type 返回屬性值
 49      */
 50     public function __get($name) {
 51         return $this->$name;
 52     }
 53     
 54     /**
 55      * 校驗驗證碼
 56      * @param type $code 表單提供的驗證碼
 57      * @return boolean
 58      */
 59     public function check($code){
 60         if (!isset($_SESSION)) {session_start();}
 61         if ($this->encodeVerify(strtolower($code)) === $_SESSION['code']){
 62             return true;
 63         }else{
 64             return false;
 65         }
 66     }
 67     
 68     //輸出驗證碼
 69     public function verify()
 70     {
 71         $this->code = $this->createVerify();
 72         //創建背景
 73         $this->createBackground();
 74         //文字顯示
 75         $this->writeString();
 76         //畫干擾線
 77         $this->paitLine();
 78         //輸入圖像
 79         $this->printImg();
 80     }
 81     
 82     /**
 83      * 創建背景圖片
 84      */
 85     private function createBackground()
 86     {
 87         //從圖片庫創建一個圖像, 判斷是否隨機
 88         if ($this->bgRand){
 89             $img = imagecreatefromjpeg('./verify/bgs/'.mt_rand(1,8).'.jpg');
 90         }else{
 91             $img = imagecreatefromjpeg('./verify/bgs/'.$this->type.'.jpg');
 92         }
 93         //創建一個圖片
 94         $this->img = imagecreatetruecolor($this->width, $this->height);
 95         //把圖片復制到創建的圖像上
 96         imagecopyresampled($this->img, $img, 0, 0, 0, 0, $this->width, $this->height, imagesx($img), imagesy($img));
 97     }
 98     
 99     /**
100      * 在圖片上寫字
101      */
102     private function writeString()
103     {
104         $color = imagecolorallocatealpha($this->img, mt_rand(0,128), mt_rand(0,128), mt_rand(0,128), 0);
105         $fontType = './verify/ttfs/'.mt_rand(1,6).'.ttf';
106         $fontSize = mt_rand(15, 20);
107         for ($i = 0; $i < $this->length; $i++) {
108             $x = 3+($this->width/$this->length)*$i;
109             $y = mt_rand(($this->height/3)*2, ($this->height/3)*2);
110             //把驗證碼寫在圖片上
111             imagettftext($this->img, $fontSize, 0, $x, $y, $color, $fontType, $this->code[$i]);
112         }
113     }
114     
115     /**
116      * 畫干擾線和字母
117      */
118     private function paitLine()
119     {
120         $px = $py = 0;
121         $codes = '2345678abcdefhijkmnpqrstuvwxyz';
122         for ($i = 0; $i < $this->width/4; $i++){
123             $num = mt_rand(0, strlen($codes)-1);
124             $color = imagecolorallocatealpha($this->img, 255, 255, 255, 80);
125             //畫字母
126             imagechar($this->img, 8, mt_rand(3, $this->width), mt_rand(3, $this->height), $codes{$num}, $color);
127         }
128     }
129     
130     /**
131      * 輸入圖像
132      */
133     private function printImg()
134     {
135         if(function_exists('imagegif')){
136             // 針對 GIF
137             header('Content-Type: image/gif');
138             imagegif($this->img);
139         }elseif(function_exists('imagejpeg')){
140             // 針對 JPEG
141             header('Content-Type: image/jpeg');
142             imagejpeg($this->img, NULL, 100);
143         }elseif(function_exists('imagepng')){
144             // 針對 PNG
145             header('Content-Type: image/png');
146             imagepng($this->img);
147         }elseif(function_exists('imagewbmp')){
148             // 針對 WBMP
149             header('Content-Type: image/vnd.wap.wbmp');
150             imagewbmp($this->img);
151         }
152     }
153     
154     /**
155      * 生成驗證碼
156      * @return string 返回生成的驗證碼
157      */
158     private function createVerify()
159     {
160         $codeSet = '2345678abcdefhijkmnpqrstuvwxyz';
161         $codes = '';
162         for ($i = 0; $i < $this->length; $i++) {
163             $codes .= $codeSet[mt_rand(0, strlen($codeSet)-1)];
164         }
165         //把驗證碼保存到session中
166         if (!isset($_SESSION)) {session_start();}
167         $_SESSION['code'] = $this->encodeVerify(strtolower($codes));
168 //        $_SESSION['code'] = $codes;
169         return $codes;
170     }
171     
172     /**
173      * 加密驗證碼
174      * @param type $string
175      * @return type
176      */
177     private function encodeVerify($string)
178     {
179         $key = substr(md5($this->seKey), 5, 8);
180         $str = substr(md5($string), 8, 10);
181         return md5($key . $str);
182     }
183     
184     /**
185      * 銷毀圖像
186      */
187     function __destruct()
188     {
189         if (isset($this->img)){
190             imagedestroy($this->img);
191         }
192     }
193 }

 以上兩步即可生生你想要的驗證。

另外說明,Verify.class.php中有一個驗證驗證碼是否正確的方法,使用如下

將你從界面中獲得的驗證碼傳入code方法中即可

if ($code -> code(這是傳入你頁面中獲取的驗證碼值)){
    #這是驗證正確的操作
}else{
    #驗證失敗的操作
}

以上就是我創建整個驗證碼的心得,希望對點擊進來看的人有幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved