<?php
$code = new Code(6, 2, 100, 50);
echo $code->outImage();
class Code {
protected $number; //验证码个数
protected $codeType; //验证码类型
protected $width; //图像宽度
protected $height; //验证码高度
protected $code; //验证码字符串
protected $image; //图像资源
public function __construct($number = 4, $codeType = 2, $width = 100, $height = 50)
{
$this->number = $number;
$this->codeType = $codeType;
$this->width = $width;
$this->height = $height;
$this->code = $this->createCode();
}
public function __destruct () {
imagedestroy($this->image);
}
/*
* 魔术方法获取code
*/
public function __get ($name = 'code') {
if ('code' == $name) {
return $this->code;
}
return false;
}
/*
* 创建验证码
*/
private function createCode () {
switch ($this->codeType) {
case 0:
return $this->numberCode();
break;
case 1:
return $this->charCode();
break;
case 2:
return $this->charNumberCode();
break;
default:
return '不支持这种类型的验证码';
}
}
/*
* 生成纯数字验证码
*/
private function numberCode () {
$numberStr = join('', range(0, 9));
echo substr(str_shuffle($numberStr), 0, $this->number);
}
/*
* 生成纯字母验证码
*/
private function charCode () {
$str = join('', range('a', 'z'));
$str .= strtoupper($str);
return substr(str_shuffle($str), 0, $this->number);
}
/*
* 生成字母和数字验证码
*/
private function charNumberCode () {
$numberStr = join('', range(0, 9));
$charStr = join('', range('a', 'z'));
$charNumberStr = $numberStr . $charStr . strtoupper($charStr);
return substr(str_shuffle($charNumberStr), 0, $this->number);
}
/*
*创建画布
*/
protected function createImage () {
$this->image = imagecreatetruecolor($this->width, $this->height);
}
/*
* 填充背景色
*/
protected function fillBack () {
imagefill($this->image, 0, 0, $this->lightColor());
}
/*
* 浅色
*/
protected function lightColor () {
return imagecolorallocate($this->image, mt_rand(130, 255), mt_rand(130, 255), mt_rand(130, 255));
}
/*
* 深色
*/
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 - 10);
$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 < 150; $i++) {
$x = mt_rand(0, $this->width);
$y = mt_rand(0, $this->height);
imagesetpixel($this->image, $x, $y, $this->lightColor());
}
}
/*
* 将图片显示出来
*/
protected function show () {
header('Content-Type:image/png');
imagepng($this->image);
}
public function outImage () {
//创建画布
$this->createImage();
//填充背景色
$this->fillBack();
//将验证码字符串画到画布中
$this->drawChar();
//添加干扰元素
$this->drawDisturb();
//输出并且显示
$this->show();
}
}
php高级实战-验证码类
最新推荐文章于 2024-08-24 17:46:18 发布