加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php的验证码类

发布时间:2020-12-13 14:16:58 所属栏目:PHP教程 来源:网络整理
导读:《php的验证码类》要点: 本文介绍了php的验证码类,希望对您有用。如果有疑问,可以联系我们。 欢迎参与《php的验证码类》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 class Verify { //宽 protected $width; //高 protected $height; //图片类

《php的验证码类》要点:
本文介绍了php的验证码类,希望对您有用。如果有疑问,可以联系我们。

欢迎参与《php的验证码类》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

class Verify

{

//宽

protected $width;

//高

protected $height;

//图片类型

protected $imgType;

//文字类型

protected $codeType;

//文字的个数

protected $num;

//保存的验证码字符串

protected $verifyCode;

//保存验证码资源的一个成员属性

protected $res;

//初始化成员

//上面这些参数

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),$this->num);

break;

}

return $string;

}

//调验证码显示的一个方法 output

//1.画图

//2.分配颜色(写两个成员方法,调的时候直接调对应的成员方法即可)

//3.背景填充

//4.画干扰点

//5.画干扰线

//6.写字

//7. 输出类型

//8. 输出图片

public function outImg()

{

$this->createImg();

$this->fillBgColor();

$this->fillPix();

$this->fillArc();

$this->writeFont();

$this->output();

}

protected function output()

{

//imagepng

$func = 'image'.$this->imgType;

$mime = 'Content-type:image/'.$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];

imagechar($this->res,5,$x,$y,$c,$this->darkColor());

}

}

protected function fillArc()

{

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

imagearc($this->res,

mt_rand(10,$this->width - 10),$this->height - 10),

mt_rand(0,$this->width),$this->height),180),

mt_rand(181,360),

$this->lightColor()

);

}

}

protected function fillPix()

{

$num = $this->pixNum();

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

imagesetpixel($this->res,mt_rand(0,$this->darkColor());

}

}

protected function pixNum()

{

$area = ceil(($this->width * $this->height) / 20);

return $area;

}

protected function fillBgColor()

{

imagefill($this->res,$this->lightColor());

}

protected function lightColor()

{

return imagecolorallocate($this->res,

mt_rand(130,255),255)

);

}

protected function darkColor()

{

return imagecolorallocate($this->res,120),120)

);

}

protected function createImg()

{

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

}

//9 .销毁图片资源

public function __destruct()

{

//imagedestroy($this->res);

}

//可以做一个魔术方法__get专门用于得到验证码字符串

public function __get($key)

{

if ($key == 'verifyCode') {

return $this->$key;

}

return false;

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读