php圖片驗證碼類_PHP教程

來源:互聯網
上載者:User
[php]
/**
* 圖片驗證碼類
* 產生圖片類型驗證碼,驗證碼包含數字和大寫字母,session中存放md5加密後的驗證碼
*
* 使用方法:
* $captcha = new Catpcha();
* $captcha->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);
}
}

/**
* 圖片驗證碼類
* 產生圖片類型驗證碼,驗證碼包含數字和大寫字母,session中存放md5加密後的驗證碼
*
* 使用方法:
* $captcha = new Catpcha();
* $captcha->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);
}
}

http://www.bkjia.com/PHPjc/477617.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477617.htmlTechArticle[php] ?php /** * 圖片驗證碼類 * 產生圖片類型驗證碼,驗證碼包含數字和大寫字母,session中存放md5加密後的驗證碼 * * 使用方法: * $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.