PHP验证码类实现

<?php


class verify{
	
	//宽
	protected $width;
	//高
	protected $height;
	//图片资源
	protected $img;
	//图片类型
	protected $imgType;
	//文字类型
	protected $type;
	//文字
	protected $checkCode;
	//文字个数
	protected $num;

	//构造方法,初使化各个成员属性包括根据文字类型,产生文字
	public function __construct($width=120,$height=40,$imgType='jpeg',$type=3,$num=4){
		$this->width=$width;
		$this->height=$height;
		$this->imgType=$imgType;
		$this->num=$num;
		$this->type=$type;
		$this->checkCode=$this->getCheckCode();

	}
	

	//产生文字得分为1,2,3    1为数字   2为字母   3为字母数字混合
	private function getCheckCode(){
		//定义一个空字符串,向他赋值,并且得到值后,待会返回这个字符串的值,这样即得到验证码
		$string='';
		
		//判断type	
		switch($this->type){
		
			case 1:
				$string=join('',array_rand(range(0,9),$this->num));
				break;
			case 2:
				$string=implode('',array_rand(array_flip(range('a','z')),$this->num));
				break;
			case 3:
				/*
				for($i=0;$i<$this->num;$i++){
					$r=mt_rand(0,2);
					switch($r){
						//0-9
						case 0:
							$char=mt_rand(48,57);
							break;
						//A-Z
						case 1:
							$char=mt_rand(65,90);
							break;
						//a-z
						case 2:
							$char=mt_rand(97,122);
							break;

					}
					//chr
					//$string.=sprintf('%c',$char);
					$string.=chr($char);	
				}*/
				$str='abcdefghijkmnprstuvwxyz23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
				
				$string=substr(str_shuffle($str),0,$this->num);

				break;
		}
		

		return $string;

	}


	//创建图片
	protected function createImg(){

		$this->img=imagecreatetruecolor($this->width,$this->height);
	}
	//
	//产生背景颜色,颜色值越大,越浅,越小越深
	protected function bgColor(){

		return imagecolorallocate($this->img,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255));
	}

	//字的颜色
	protected function fontColor(){
	
		return imagecolorallocate($this->img,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));
	}

	//填充背景颜色
	protected function filledColor(){
		
		imagefilledrectangle($this->img,0,0,$this->width,$this->height,$this->bgColor());

	}
	//画上干扰点
	protected function pix(){

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

			imagesetpixel($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),$this->fontColor());				
		}
	}

	//画上干扰线
	protected function arc(){

		for($i=0;$i<5;$i++){
			
			imagearc($this->img,mt_rand(10,$this->width-10),mt_rand(10,$this->height-10),200,50,mt_rand(0,90),mt_rand(100,350),$this->fontColor());

		}

	}


	//写字,得到x,y
	//
	//ceil   进一法取整
	//
	//floor  舍法取整
	//
	protected function write(){
		
		for($i=0;$i<$this->num;$i++){

			$x=ceil($this->width/$this->num)*$i;
			$y=mt_rand(0,$this->height-15);

			imagechar($this->img,5,$x,$y,$this->checkCode[$i],$this->fontColor());

		}

	}
	//输出
	protected function output(){

		$func='image'.$this->imgType;
		
		$header='Content-type:image/'.$this->imgType;
		
		if(function_exists($func)){
			header($header);
			$func($this->img);
		}else{
			echo '不支持该图片类型';
			exit;
		}
	
	}

	//组装得到图片
	
	public function getImage(){
		$this->createImg();
		$this->filledColor();
		$this->pix();
		$this->arc();
		$this->write();
		$this->output();
		
				
		

	}
	//写个魔术方法,专门给外部得到验证码字符串使用
	
	public function __get($className){

		if($className=='checkCode'){
			return $this->checkCode;
		}
	}

	//销毁
	
	public function __destruct(){
		imagedestroy($this->img);
	}

}




?>
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值