PHP 動(dòng)態(tài)隨機(jī)生成驗(yàn)證碼類代碼
更新時(shí)間:2010年04月09日 16:56:43 作者:
這個(gè)利用PHP動(dòng)態(tài)隨機(jī)生成驗(yàn)證碼的類是在LAMP的書上看到的。感覺寫的很好就收藏了下來。
下面是效果圖,這個(gè)效果圖是沒有開啟干擾碼的效果圖

下面是類代碼
<?php
/************************************************
//FILE:ImageCode
//DONE:生成動(dòng)態(tài)驗(yàn)證碼類
//DATE"2010-3-31
//Author:www.5dkx.com 5D開心博客
************************************************************************/
class ImageCode{
private $width; //驗(yàn)證碼圖片寬度
private $height; //驗(yàn)證碼圖片高度
private $codeNum; //驗(yàn)證碼字符個(gè)數(shù)
private $checkCode; //驗(yàn)證碼字符
private $image; //驗(yàn)證碼畫布
/************************************************************************
// Function:構(gòu)造函數(shù)
// Done:成員屬性初始化
// Author:www.5dkx.com 5D開心博客
************************************************************************/
function __construct($width=60,$height=20,$codeNum=4)
{
$this->width = $width;
$this->height = $height;
$this->codeNum = $codeNum;
$this->checkCode = $this->createCheckCode();
}
function showImage()
{
$this->getcreateImage();
$this->outputText();
$this->setDisturbColor();
$this->outputImage();
}
function getCheckCode()
{
return $this->chekCode;
}
private function getCreateImage()
{
$this->image = imagecreatetruecolor($this->width,$this->height);
$back = imagecolorallocate($this->image,255,255,255);
$border = imagecolorallocate($this->image,255,255,255);
imagefilledrectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
//使用純白色填充矩形框,這里用的話后面干擾碼失效
/*如果想用干擾碼的話使用下面的*/
//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;//數(shù)字
case 1: $rand_number = rand(65,90);break;//大寫字母
case 2: $rand_number = rand(97,122);break;//小寫字母
}
$asc = sprintf("%c",$rand_number);
$asc_number = $asc_number.$asc;
}
return $asc_number;
}
private function setDisturbColor()//干擾嗎設(shè)置
{
for($i=0;$i<=100;$i++)
{
//$color = imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
$color = imagecolorallocate($this->image,255,255,255);
imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
}
//$color = imagecolorallocate($this->image,0,0,0);
//imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
}
private function outputText()
{
//隨機(jī)顏色、隨機(jī)擺放、隨機(jī)字符串向圖像輸出
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()
{
if(imagetypes()&IMG_GIF)
{
header("Content_type:image/gif");
imagegif($this->image);
}
elseif(imagetypes()&IMG_JPG)
{
header("Content-type:image/jpeg");
imagejpeg($this->image,"",0.5);
}
elseif(imagetypes()&IMG_PNG)
{
header("Content-type:image/png");
imagejpeg($this->image);
}
elseif(imagetypes()&IMG_WBMP)
{
header("Content-type:image/vnd.wap.wbmp");
imagejpeg($this->image);
}
else
{
die("PHP不支持圖像創(chuàng)建");
}
}
function __destruct()
{
imagedestroy($this->image);
}
}
/*顯示*/
/*******************************************************************
session_start();
$image = new ImageCode(60,20,4);
$image->showImage();
$_SESSION['ImageCode'] = $image->getCheckCode();
*******************************************************************/
?>

下面是類代碼
復(fù)制代碼 代碼如下:
<?php
/************************************************
//FILE:ImageCode
//DONE:生成動(dòng)態(tài)驗(yàn)證碼類
//DATE"2010-3-31
//Author:www.5dkx.com 5D開心博客
************************************************************************/
class ImageCode{
private $width; //驗(yàn)證碼圖片寬度
private $height; //驗(yàn)證碼圖片高度
private $codeNum; //驗(yàn)證碼字符個(gè)數(shù)
private $checkCode; //驗(yàn)證碼字符
private $image; //驗(yàn)證碼畫布
/************************************************************************
// Function:構(gòu)造函數(shù)
// Done:成員屬性初始化
// Author:www.5dkx.com 5D開心博客
************************************************************************/
function __construct($width=60,$height=20,$codeNum=4)
{
$this->width = $width;
$this->height = $height;
$this->codeNum = $codeNum;
$this->checkCode = $this->createCheckCode();
}
function showImage()
{
$this->getcreateImage();
$this->outputText();
$this->setDisturbColor();
$this->outputImage();
}
function getCheckCode()
{
return $this->chekCode;
}
private function getCreateImage()
{
$this->image = imagecreatetruecolor($this->width,$this->height);
$back = imagecolorallocate($this->image,255,255,255);
$border = imagecolorallocate($this->image,255,255,255);
imagefilledrectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
//使用純白色填充矩形框,這里用的話后面干擾碼失效
/*如果想用干擾碼的話使用下面的*/
//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;//數(shù)字
case 1: $rand_number = rand(65,90);break;//大寫字母
case 2: $rand_number = rand(97,122);break;//小寫字母
}
$asc = sprintf("%c",$rand_number);
$asc_number = $asc_number.$asc;
}
return $asc_number;
}
private function setDisturbColor()//干擾嗎設(shè)置
{
for($i=0;$i<=100;$i++)
{
//$color = imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
$color = imagecolorallocate($this->image,255,255,255);
imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
}
//$color = imagecolorallocate($this->image,0,0,0);
//imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
}
private function outputText()
{
//隨機(jī)顏色、隨機(jī)擺放、隨機(jī)字符串向圖像輸出
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()
{
if(imagetypes()&IMG_GIF)
{
header("Content_type:image/gif");
imagegif($this->image);
}
elseif(imagetypes()&IMG_JPG)
{
header("Content-type:image/jpeg");
imagejpeg($this->image,"",0.5);
}
elseif(imagetypes()&IMG_PNG)
{
header("Content-type:image/png");
imagejpeg($this->image);
}
elseif(imagetypes()&IMG_WBMP)
{
header("Content-type:image/vnd.wap.wbmp");
imagejpeg($this->image);
}
else
{
die("PHP不支持圖像創(chuàng)建");
}
}
function __destruct()
{
imagedestroy($this->image);
}
}
/*顯示*/
/*******************************************************************
session_start();
$image = new ImageCode(60,20,4);
$image->showImage();
$_SESSION['ImageCode'] = $image->getCheckCode();
*******************************************************************/
?>
您可能感興趣的文章:
- php生成隨機(jī)數(shù)的三種方法
- PHP生成不重復(fù)隨機(jī)數(shù)的方法匯總
- PHP n個(gè)不重復(fù)的隨機(jī)數(shù)生成代碼
- PHP生成指定長度隨機(jī)數(shù)最簡潔的方法
- php隨機(jī)生成數(shù)字字母組合的方法
- 一個(gè)php生成16位隨機(jī)數(shù)的代碼(兩種方法)
- php生成0~1隨機(jī)小數(shù)的方法(必看)
- php生成隨機(jī)顏色方法匯總
- PHP隨機(jī)生成唯一HASH值自定義函數(shù)
- php生成不重復(fù)隨機(jī)數(shù)、數(shù)組的4種方法分享
- php生成隨機(jī)數(shù)/生成隨機(jī)字符串的方法小結(jié)【5種方法】
相關(guān)文章
解析php addslashes()與addclashes()函數(shù)的區(qū)別和比較
本篇文章是對php中的addslashes()與addclashes()函數(shù)的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php使用array_search函數(shù)實(shí)現(xiàn)數(shù)組查找的方法
這篇文章主要介紹了php使用array_search函數(shù)實(shí)現(xiàn)數(shù)組查找的方法,涉及php數(shù)組查找的相關(guān)技巧,需要的朋友可以參考下2015-06-06基于PHP安裝zip拓展,以及l(fā)ibzip安裝的問題
下面小編就為大家分享一篇基于PHP安裝zip拓展,以及l(fā)ibzip安裝的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03PHP 實(shí)現(xiàn)公歷日期與農(nóng)歷日期的互轉(zhuǎn)換
這篇文章主要介紹了PHP 實(shí)現(xiàn)公歷日期與農(nóng)歷日期的互轉(zhuǎn)換的相關(guān)資料,希望通過本文大家能幫助到大家,需要的朋友可以參考下2017-09-09PHP中round()函數(shù)對浮點(diǎn)數(shù)進(jìn)行四舍五入的方法
這篇文章主要介紹了PHP中round()函數(shù)對浮點(diǎn)數(shù)進(jìn)行四舍五入的方法,通過詳盡的實(shí)例對round()函數(shù)的各種常見用法進(jìn)行了歸納整理,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11