當前位置:才華齋>計算機>php語言>

一個漂亮的php驗證碼類

php語言 閱讀(3.27W)

程式設計的魅力在於可以實現想要的功能,下面小編就為大家分享一個漂亮的php驗證碼類。需要的朋友可以過來參考下,更多訊息請關注應屆畢業生網。

一個漂亮的php驗證碼類

  直接上程式碼,程式碼如下:

//驗證碼類

class ValidateCode {

private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//隨機因子

private $code;//驗證碼

private $codelen = 4;//驗證碼長度

private $width = 130;//寬度

private $height = 50;//高度

private $img;//圖形資源控制代碼

private $font;//指定的字型

private $fontsize = 20;//指定字型大小

private $fontcolor;//指定字型顏色

//構造方法初始化

public function __construct() {

$this->font = dirname(__FILE__).'/font/';//注意字型路徑要寫對,否則顯示不了圖片

}

//生成隨機碼

private function createCode() {

$_len = strlen($this->charset)-1;

for ($i=0;$i<$this->codelen;$i++) {

$this->code .= $this->charset[mt_rand(0,$_len)];

}

}

//生成背景

private function createBg() {

$this->img = imagecreatetruecolor($this->width, $this->height);

$color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));

imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);

}

//生成文字

private function createFont() {

$_x = $this->width / $this->codelen;

for ($i=0;$i<$this->codelen;$i++) {

$this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));

imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);

}

}

//生成線條、雪花

private function createLine() {

//線條

for ($i=0;$i<6;$i++) {

$color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));

imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);

}

//雪花

for ($i=0;$i<100;$i++) {

$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));

imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);

}

}

//輸出

private function outPut() {

header('Content-type:image/png');

imagepng($this->img);

imagedestroy($this->img);

}

//對外生成

public function doimg() {

$this->createBg();

$this->createCode();

$this->createLine();

$this->createFont();

$this->outPut();

}

//獲取驗證碼

public function getCode() {

return strtolower($this->code);

}

}

輸出例項:

  使用方法:

  1、先把驗證碼類儲存為一個名為 的檔案;

  2、新建一個名為 的檔案進行呼叫該類;

程式碼如下:

session_start();

require './'; //先把類包含進來,實際路徑根據實際情況進行修改。

$_vc = new ValidateCode(); //例項化一個物件

$_vc->doimg();

$_SESSION['authnum_session'] = $_vc->getCode();//驗證碼儲存到SESSION中

  3、引用到頁面中,程式碼如下:

程式碼如下:

  4、一個完整的`驗證頁面,程式碼如下:

程式碼如下:

session_start();

//在頁首先要開啟session,

//error_reporting(2047);

session_destroy();

//將session去掉,以每次都能取新的session值;

//用seesion 效果不錯,也很方便

?>

此例為session驗證例項

驗證碼:

//列印上一個session;

//echo "上一個session:".$_SESSION["authnum_session"]."

";

$validate="";

if(isset($_POST["validate"])){

$validate=$_POST["validate"];

echo "您剛才輸入的是:".$_POST["validate"]."

狀態:";

if($validate!=$_SESSION["authnum_session"]){

//判斷session值與使用者輸入的驗證碼是否一致;

echo "輸入有誤";

}else{

echo "通過驗證";

}

}

?>