php圖片驗證碼種

來源:互聯網
上載者:User
php圖片驗證碼類
buildAndExportImage(); *  * 作          者: luojing * 建立時間: 2013-3-27 上午11:42:12 */class Captcha {private $width;//寬度private $height; //高度private $codeNum;//驗證碼字元數量private $image;//驗證碼映像資源private $sessionKey;//session中儲存的名字private $captcha;//驗證碼字串const charWidth = 10;//單個字元寬度,根據輸出字元大小而變/** * 建立驗證碼類,初始化相關參數 * @param  $width 圖片寬度 * @param  $height 圖片高度 * @param  $codeNum 驗證碼字元數量 * @param  $sessionKey session中儲存的名字 */function __construct($width = 50, $height = 20, $codeNum = 4, $sessionKey = 'captcha') {$this->width = $width;$this->height = $height;$this->codeNum = $codeNum;$this->sessionKey = $sessionKey;//保證最小高度和寬度if($height < 20) {$this->height = 20;}if($width < ($codeNum * self::charWidth + 10)) {//左右各保留5像素空隙$this->width = $codeNum * self::charWidth + 10;}}/** * 構造並輸出驗證碼圖片 */public  function buildAndExportImage() {$this->createImage();$this->setDisturb();$this->setCaptcha();$this->exportImage();}/** * 構造映像,設定底色 */private function createImage() {//建立映像$this->image = imagecreatetruecolor($this->width, $this->height);  //建立背景色$bg = imagecolorallocate($this->image, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));  //填充背景色imagefilledrectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $bg);}/** * 設定幹擾元素 */private function setDisturb() {//設定幹擾點for($i = 0; $i < 150; $i++) {$color = imagecolorallocate($this->image, mt_rand(150, 200),  mt_rand(150, 200),  mt_rand(150, 200));imagesetpixel($this->image, mt_rand(5, $this->width - 10), mt_rand(5, $this->height - 3), $color);}//設定幹擾線for($i = 0; $i < 10; $i++) {$color = imagecolorallocate($this->image, mt_rand(150, 220), mt_rand(150, 220), mt_rand(150, 220));imagearc($this->image, mt_rand(-10, $this->width), mt_rand(-10, $this->height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $color);}//建立邊框色$border = imagecolorallocate($this->image, mt_rand(0, 50), mt_rand(0, 50), mt_rand(0, 50));//畫邊框imagerectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $border);}/** * 產生並繪製驗證碼 */private function setCaptcha() {$str = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';//產生驗證碼字元for($i = 0; $i < $this->codeNum; $i++) {$this->captcha .= $str{mt_rand(0, strlen($str) - 1)};}//繪製驗證碼for($i = 0; $i < strlen($this->captcha); $i++) {$color = imagecolorallocate($this->image, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200));$x = floor(($this->width - 10)/$this->codeNum);$x = $x*$i + floor(($x-self::charWidth)/2) + 5;$y = mt_rand(2, $this->height - 20);imagechar($this->image, 5, $x, $y, $this->captcha{$i}, $color);}}/* * 輸出映像,驗證碼儲存到session中 */private function exportImage() {if(imagetypes() & IMG_GIF){header('Content-type:image/gif');imagegif($this->image);} else if(imagetypes() & IMG_PNG){header('Content-type:image/png');           imagepng($this->iamge);} else if(imagetypes() & IMG_JPEG) {header('Content-type:image/jpeg');           imagepng($this->iamge);} else {imagedestroy($this->image);die("Don't support image type!");}//將驗證碼資訊儲存到session中,md5加密if(!isset($_SESSION)){    session_start();} $_SESSION[$this->sessionKey] = md5($this->captcha);        imagedestroy($this->image);  }function __destruct() {unset($this->width, $this->height, $this->codeNum,$this->captcha);}}

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.