[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 =...