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

php 驗證碼類

編輯:關於PHP編程

<?php
 /**
  * 驗證碼類
  * [email protected]
  * 2012-02-09
  * */
 class Vailimg {
         private $width;                               //驗證碼圖片的寬度
         private $height;                               //驗證碼圖片的高度
         private $codeNum;                            //驗證碼字符的個數
         private $checkCode;                           //驗證碼字符
         private $image;                               //驗證碼畫布
 
         /* 構造方法用來實例化驗證碼對象,並為一些成員屬性初使化        */
         /* 參數width: 設置驗證碼圖片的寬度,默認寬度值為60像素        */
         /* 參數height: 設置驗證碼圖片的高度,默認高度值為20像素        */
         /* 參數codeNum: 設置驗證碼中字母和數字的個數,默認個數為4個  */
         function __construct($width=60, $height=20, $codeNum=4) {
             $this->width=$width;                     //為成員屬性width初使化
             $this->height=$height;                     //為成員屬性height初使化
             $this->codeNum=$codeNum;               //為成員屬性codeNum初使化
             $this->checkCode=$this->createCheckCode();  //為成員屬性checkCode初使化
         }
         function showImage(){                       //通過訪問該方法向浏覽器中輸出圖像
             $this->getCreateImage();                 //調用內部方法創建畫布並對其進行初使化
             $this->outputText();                     //向圖像中輸出隨機的字符串
             $this->setDisturbColor();                 //向圖像中設置一些干擾像素
             $this->outputImage();                    //生成相應格式的圖像並輸出
         }
         function getCheckCode(){                     //訪問該方法獲取隨機創建的驗證碼字符串
             return $this->checkCode;                 //返回成員屬性$checkCode保存的字符串
         }
         private function getCreateImage(){              //用來創建圖像資源,並初使化背影
             $this->image=imageCreate($this->width,$this->height);
             $back=imageColorAllocate($this->image, 255, 255, 255);
             $border=imageColorAllocate($this->image, 0, 0, 0);
             imageRectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
         }
         private function createCheckCode(){           //隨機生成用戶指定個數的字符串
             for($i=0;$i<$this->codeNum;$i++) {
                 $number=rand(0,2);
                 switch($number){
                     case 0 : $rand_number=rand(48,57);break;    //數字
                     case 1 : $rand_number=rand(65,90);break;    //大寫字母
                     case 2 : $rand_number=rand(97,122);break;   //小寫字母
                 }
                 $ascii=sprintf("%c",$rand_number);
                 $ascii_number=$ascii_number.$ascii;
             }   
             return $ascii_number;   
         }   
         private function setDisturbColor() {    //設置干擾像素,向圖像中輸出不同顏色的100個點
             for ($i=0;$i<=50;$i++) {
                 $color = imagecolorallocate($this->image, rand(0,255), rand(0,255), rand(0,255));
                  imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
             }
         }
         private function outputText() {       //隨機顏色、隨機擺放、隨機字符串向圖像中輸出
             for ($i=0;$i<=$this->codeNum;$i++) {
                  $bg_color = imagecolorallocate($this->image, rand(0,255), rand(0,128), rand(0,255));
                  $x = floor($this->width/$this->codeNum)*$i+3;
                  $y = rand(0,$this->height-15);
                  imagechar($this->image, 5, $x, $y, $this->checkCode[$i], $bg_color);
               }
         }
 
         private function outputImage(){              //自動檢測GD支持的圖像類型,並輸出圖像
             if(imagetypes() & IMG_GIF){          //判斷生成GIF格式圖像的函數是否存在
                 header("Content-type: image/gif");  //發送標頭信息設置MIME類型為image/gif
                 imagegif($this->image);           //以GIF格式將圖像輸出到浏覽器
             }elseif(imagetypes() & IMG_JPG){      //判斷生成JPG格式圖像的函數是否存在
                 header("Content-type: image/jpeg"); //發送標頭信息設置MIME類型為image/jpeg
                 imagejpeg($this->image, "", 0.5);   //以JPEN格式將圖像輸出到浏覽器
             }elseif(imagetypes() & IMG_PNG){     //判斷生成PNG格式圖像的函數是否存在
                 header("Content-type: image/png");  //發送標頭信息設置MIME類型為image/png
                 imagepng($this->image);          //以PNG格式將圖像輸出到浏覽器
             }elseif(imagetypes() & IMG_WBMP){   //判斷生成WBMP格式圖像的函數是否存在
                  header("Content-type: image/vnd.wap.wbmp");   //發送標頭為image/wbmp
                  imagewbmp($this->image);       //以WBMP格式將圖像輸出到浏覽器
             }else{                              //如果沒有支持的圖像類型
                 die("PHP不支持圖像創建!");    //不輸出圖像,輸出一錯誤消息,並退出程序
             }   
         }
         function __destruct(){                      //當對象結束之前銷毀圖像資源釋放內存
             imagedestroy($this->image);            //調用GD庫中的方法銷毀圖像資源
         }
 }
 ?>
 
 摘自chaojie2009的專欄

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