php写验证码类和实现其方法功能

php写验证码类和实现方法功能

class Code{
	protected $number;
	protected $codeType;
	protected $width;
	protected $height;
	protected $image;
	protected $code;
	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 __get($name)
	{
		if($name=='code')
		{
			return $this->code;
		}
		return false;
	}
	
	protected function createCode()
	{
		switch($this->codeType){
			case 0:
				$code=$this->getNumberCode();
				break;
			case 1:
				$code=$this->getCharCode();
				break;
			case 2:
				$code=$this->getNumCharCode();
				break;
			default:
				die('不支持这种验证码');
		} 
		return $code;
	}
	
	protected function getNumberCode()
	{
		$str=join('',range(0,9));
		return substr(str_shuffle($str),0,$this->number);
	}
	
	protected function getCharCode()
	{
		$str=join('',range('a','z'));
		$str=$str.strtoupper($str);
		return substr(str_shuffle($str),0,$this->number);
	}
	
	protected function getNumCharCode()
	{
		$numStr=join('',range(0,9));
		$str=join('',range('a','z'));
		$str=$numStr.$str.strtoupper($str);
		return substr(str_shuffle($str),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();
	}
}

$code=new Code();
echo $code->outImage();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值