code.php验证码,PHP code 验证码生成类定义和简单使用示例

本文实例讲述了PHP code 验证码生成类定义和简单使用。分享给大家供大家参考,具体如下:

code.php

namespace code;

/**

* Class Code

*/

class Code

{

protected $number;//验证码内字符个数

protected $codeType;//验证码样式

protected $width;//图像宽

protected $height;//图像高

protected $code;//验证码

protected $image;//图像资源

/**

* Code constructor.

* @param int $number

* @param int $codeType

* @param int $width

* @param int $height

*/

public function __construct($number=5, $codeType=2, $width=100, $height=40)

{

$this->number = $number;

$this->codeType = $codeType;

$this->width = $width;

$this->height = $height;

$this->code = $this->createCode();

}

/**

* 销毁资源

*/

public function __destruct()

{

imagedestroy($this->image);

}

/**

* 外部调用code时触发

* @param $name

* @return bool

*/

public function __get($name)

{

if ('code' == $name) {

return $this->$name;

} else {

return false;

}

}

/**

* 生成code

*/

protected function createCode()

{

switch ($this->codeType) {

case 0:

$code = $this->getNum();

break;

case 1:

$code = $this->getChar();

break;

case 2:

$code = $this->getNumChar();

break;

default:

die('样式不对');

}

return $code;

}

/**

* 数字验证码

* @return string

*/

protected function getNum()

{

$str = join('', range(0,9));

return substr(str_shuffle($str), 0, $this->number);

}

/**

* 字符验证码

* @return string

*/

protected function getChar()

{

$str = join('', range('a', 'z'));

$str = $str . strtoupper($str);

return substr(str_shuffle($str), 0, $this->number);

}

/**

* 字符和数字混合验证码

* @return string

*/

protected function getNumChar()

{

$num = join('', range(0, 9));

$str = join('', range('a', 'z'));

$str_big = strtoupper($str);

$numChar = $num . $str . $str_big;

return substr(str_shuffle($numChar), 0, $this->number);

}

/**

* 生成图像

*/

protected function createImage()

{

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

}

/**

* 填充背景色

*/

protected function fillColor()

{

imagefill($this->image, 0, 0, $this->lightColor());

}

/**

* 浅颜色

* @return int

*/

protected function lightColor()

{

return imagecolorallocate($this->image, mt_rand(170, 255), mt_rand(170, 255), mt_rand(170, 255));

}

/**

* 深颜色

* @return int

*/

protected function darkColor()

{

return imagecolorallocate($this->image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));

}

/**

* 添加验证码字符

*/

protected function drawChar()

{

$width = ceil($this->width/$this->number);

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

$x = mt_rand($i * ($width - 5), ($i + 1) * ($width - 5));

$y = mt_rand(0, $this->height - 15);

imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());

}

}

/**

* 添加干扰点

*/

protected function drawDisturb()

{

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

imagesetpixel($this->image, mt_rand(0, $this->width), mt_rand(0, $this->height), $this->darkColor());

}

}

/**

* 添加干扰线

*/

protected function drawArc()

{

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

imagearc($this->image, mt_rand(5, $this->width), mt_rand(5, $this->height), mt_rand(5, $this->width), mt_rand(5, $this->height),mt_rand(0, 70), mt_rand(300, 360), $this->darkColor());

}

}

/**

* 输出显示

*/

protected function show()

{

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

imagepng($this->image);

}

/**

* 外部image

*/

public function outImage()

{

$this->createImage();//创建画布

$this->fillColor();//填充背景色

$this->drawChar();//添加验证字符

$this->drawDisturb();//添加干扰点

$this->drawArc();//添加干扰线

$this->show();//输出

}

}

展示验证码。。保存验证码和过期时间

include './code/Code.php';

$code = new code\Code();

$code->outImage();

session_start();

$_SESSION['code'] = [

'code' => $code->code,

'exp_time' => time() + (60 * 60 * 10),

];

希望本文所述对大家PHP程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值