個(gè)人寫的PHP驗(yàn)證碼生成類分享
更新時(shí)間:2014年08月21日 08:51:58 投稿:junjie
這篇文章主要介紹了個(gè)人寫的PHP驗(yàn)證碼生成類分享,此驗(yàn)證碼類直接拿去就可以用,也可以用來學(xué)習(xí)和分析,需要的朋友可以參考下
此驗(yàn)證碼類直接拿去就可以用,也可以參考!
其中類成員codestr是生成的驗(yàn)證碼字符串:
<?php
/**
* 驗(yàn)證碼
*/
class Code{
// 1. 定義各個(gè)成員 有寬、高、畫布、字?jǐn)?shù)、類型、畫類型
private $width; //寬度
private $height; //高度
private $num; //驗(yàn)證碼字?jǐn)?shù)
private $imgType; //生成圖片類型
private $Type; //字串類型 1,2,3 三個(gè)選項(xiàng) 1 純數(shù)字 2 純小寫字母 3 大小寫數(shù)字混合
private $hb; //畫布
public $codestr; // 驗(yàn)證碼字串
public function __construct($height=20,$num=4,$imgType="jpeg",$Type=1){
$this->width = $num*20;
$this->height = $height;
$this->num = $num;
$this->imgType = $imgType;
$this->Type = $Type;
$this->codestr = $this->codestr();
$this->zuhe();
}
// 2. 定義隨機(jī)獲取字符串函數(shù)
private function codestr(){
switch($this->Type){
case 1: // 類型為1 獲取1-9隨機(jī)數(shù)
$str = implode("",array_rand(range(0,9),$this->num));
break;
case 2: // 類型為2 獲取a-z隨機(jī)小寫字母
$str = implode("",array_rand(array_flip(range(a,z)),$this->num));
break;
case 3: // 類型為3 獲取數(shù)字,小寫字母,大寫字母 混合
for($i=0;$i<$this->num;$i++){
$m = rand(0,2);
switch($m){
case 0:
$o = rand(48,57);
break;
case 1:
$o = rand(65,90);
break;
case 2:
$o = rand(97,122);
break;
}
$str .= sprintf("%c",$o);
}
break;
}
return $str;
}
// 3. 初始化畫布圖像資源
private function Hb(){
$this->hb = imagecreatetruecolor($this->width,$this->height);
}
// 4. 生成背景顏色
private function Bg(){
return imagecolorallocate($this->hb,rand(130,250),rand(130,250),rand(130,250));
}
// 5. 生成字體顏色
private function Font(){
return imagecolorallocate($this->hb,rand(0,100),rand(0,100),rand(0,100));
}
// 6. 填充背景顏色
private function BgColor(){
imagefilledrectangle($this->hb,0,0,$this->width,$this->height,$this->Bg());
}
// 7. 干擾點(diǎn)
private function ganrao(){
$sum=floor(($this->width)*($this->height)/3);
for($i=0;$i<$sum;$i++){
imagesetpixel($this->hb,rand(0,$this->width),rand(0,$this->height),$this->Bg());
}
}
// 8. 隨機(jī)直線 弧線
private function huxian(){
for($i=0;$i<$this->num;$i++){
imageArc($this->hb,rand(0,$this->width),rand(0,$this->height),rand(0,$this->width),rand(0,$this->height),rand(0,360),rand(0,360),$this->Bg());
}
}
// 9. 寫字
private function xiezi(){
for($i=0;$i<$this->num;$i++){
$x=ceil($this->width/$this->num)*$i;
$y=rand(1,$this->height-15);
imagechar($this->hb,5,$x+4,$y,$this->codestr[$i],$this->Font());
}
}
// 10. 輸出
private function OutImg(){
$shuchu="image".$this->imgType;
$header="Content-type:image/".$this->imgType;
if(function_exists($shuchu)){
header($header);
$shuchu($this->hb);
}else{
exit("GD庫(kù)沒有此類圖像");
}
}
// 11. 拼裝
private function zuhe(){
$this->Hb();
$this->BgColor();
$this->ganrao();
$this->huxian();
$this->xiezi();
$this->OutImg();
}
public function getCodeStr(){
return $this->codestr;
}
}
?>
您可能感興趣的文章:
- 一個(gè)漂亮的php驗(yàn)證碼類(分享)
- PHP驗(yàn)證碼類代碼( 最新修改,完全定制化! )
- 一個(gè)經(jīng)典的PHP驗(yàn)證碼類分享
- 一個(gè)好用的PHP驗(yàn)證碼類實(shí)例分享
- 一個(gè)PHP驗(yàn)證碼類代碼分享(已封裝成類)
- 一個(gè)實(shí)用的php驗(yàn)證碼類
- PHP實(shí)現(xiàn)的封裝驗(yàn)證碼類詳解
- PHP使用GIFEncoder類生成的GIF動(dòng)態(tài)圖片驗(yàn)證碼
- 一個(gè)簡(jiǎn)單安全的PHP驗(yàn)證碼類、PHP驗(yàn)證碼
- 分享一個(gè)漂亮的php驗(yàn)證碼類
- PHP驗(yàn)證碼類ValidateCode解析
- PHP code 驗(yàn)證碼生成類定義和簡(jiǎn)單使用示例
相關(guān)文章
Yii2.0實(shí)現(xiàn)的批量更新及批量插入功能示例
這篇文章主要介紹了Yii2.0實(shí)現(xiàn)的批量更新及批量插入功能,結(jié)合實(shí)例形式總結(jié)分析了Yii2.0數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)的批量更新與批量插入功能相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
thinkphp循環(huán)結(jié)構(gòu)用法實(shí)例
這篇文章主要介紹了thinkphp循環(huán)結(jié)構(gòu)用法,以實(shí)例形式講解了for、volist及foreach的用法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11
PhpStorm的使用教程(本地運(yùn)行PHP+遠(yuǎn)程開發(fā)+快捷鍵)
這篇文章主要介紹了PhpStorm的使用教程(本地運(yùn)行PHP+遠(yuǎn)程開發(fā)+快捷鍵),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
yii2局部關(guān)閉(開啟)csrf的驗(yàn)證的實(shí)例代碼
本篇文章主要介紹了yii2局部關(guān)閉(開啟)csrf的驗(yàn)證的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
詳解thinkphp5+swoole實(shí)現(xiàn)異步郵件群發(fā)(SMTP方式)
這篇文章主要介紹了詳解thinkphp5+swoole實(shí)現(xiàn)異步郵件群發(fā)(SMTP方式),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10

