class Verify
{
//寬
protected $width;
//高
protected $height;
//圖片類型
protected $imgType;
//文字類型
protected $codeType;
//文字的個數(shù)
protected $num;
//保存的驗(yàn)證碼字符串
protected $verifyCode;
//保存驗(yàn)證碼資源的一個成員屬性
protected $res;
//初始化成員
//上面這些參數(shù)
public function __construct($width = 100, $height = 50, $imgType = 'png', $codeType = 3, $num = 4)
{
$this->width = $width;
$this->height = $height;
$this->imgType = $imgType;
$this->codeType = $codeType;
$this->num = $num;
$this->verifyCode = $this->createVerifyCode();
}
protected function createVerifyCode()
{
$string = '';
switch ($this->codeType) {
case 1:
$string = implode('',array_rand(range(0,9),$this->num));
break;
case 2:
$string = join('',array_rand(array_flip(range('a','z')),4));
break;
case 3:
/*
for ($i = 0; $i < $this->num; $i++) {
$r= mt_rand(0,2);
switch ($r) {
case 0:
$ascii = mt_rand(48,57);
break;
case 1:
$ascii = mt_rand(65,90);
break;
case 2:
$ascii = mt_rand(97,122);
break;
}
$string .= chr($ascii);
}
*/
$str = 'abcdefghijkmnpqrstuvwxzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
$string = substr(str_shuffle($str),0,$this->num);
break;
}
return $string;
}
//調(diào)驗(yàn)證碼顯示的一個方法 output
//1.畫圖
//2.分配顏色(寫兩個成員方法,調(diào)的時候直接調(diào)對應(yīng)的成員方法即可)
//3.背景填充
//4.畫干擾點(diǎn)
//5.畫干擾線
//6.寫字
//7. 輸出類型
//8. 輸出圖片
public function outImg()
{
$this->createImg();
$this->fillBgColor();
$this->fillPix();
$this->fillArc();
$this->writeFont();
$this->output();
}
protected function output()
{
//p_w_picpathpng
$func = 'p_w_picpath'.$this->imgType;
$mime = 'Content-type:p_w_picpath/'.$this->imgType;
header($mime);
$func($this->res);
}
protected function writeFont()
{
for ($i = 0; $i < $this->num; $i++) {
$width = ceil($this->width / $this->num);
$x = $width * $i;
$y= mt_rand(5,$this->height - 10);
$c = $this->verifyCode[$i];
p_w_picpathchar($this->res,5,$x,$y,$c,$this->darkColor());
}
}
protected function fillArc()
{
for($i = 0; $i < 10; $i++) {
p_w_picpatharc($this->res,
mt_rand(10,$this->width - 10),
mt_rand(10,$this->height - 10),
mt_rand(0,$this->width),
mt_rand(0,$this->height),
mt_rand(0,180),
mt_rand(181,360),
$this->lightColor()
);
}
}
protected function fillPix()
{
$num = $this->pixNum();
for ($i = 0; $i < $num; $i++) {
p_w_picpathsetpixel($this->res,mt_rand(0,$this->width),mt_rand(0,$this->height),$this->darkColor());
}
}
protected function pixNum()
{
$area = ceil(($this->width * $this->height) / 20);
return $area;
}
protected function fillBgColor()
{
p_w_picpathfill($this->res,0,0,$this->lightColor());
}
protected function lightColor()
{
return p_w_picpathcolorallocate($this->res,
mt_rand(130,255),
mt_rand(130,255),
mt_rand(130,255)
);
}
protected function darkColor()
{
return p_w_picpathcolorallocate($this->res,
mt_rand(0,120),
mt_rand(0,120),
mt_rand(0,120)
);
}
protected function createImg()
{
$this->res = p_w_picpathcreatetruecolor($this->width,$this->height);
}
//9 .銷毀圖片資源
public function __destruct()
{
//p_w_picpathdestroy($this->res);
}
//可以做一個魔術(shù)方法__get專門用于得到驗(yàn)證碼字符串
public function __get($key)
{
if ($key == 'verifyCode') {
return $this->$key;
}
return false;
}
}
新寧ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!