PHP验证码类

<?php
/**
 * 验证码类
 * @date 2011-7-26
 * @author caoge
 */
class CheckCode{
	//验证码位数
	private $mCheckCodeNum=4;
	//验证码
	private $mCheckCode='';
	//验证码图片
	private $mCheckImage='';
	//验证码干扰素
	private $mDisturbColor='';
	//验证码图片宽度
	private $mCheckImageWidth='80';
	//验证码图片高度
	private $mCheckImageHeight='20';
	
	/**
	 * 输出头
	 */
	public function OutFileHeader(){
		header("content-type:image/png");
	}
	
	/**
	 * 生成验证码
	 */
	public function CreateCheckCode(){
		$this->mCheckCode=strtoupper(substr(md5(rand()),0,$this->mCheckCodeNum));
		return $this->mCheckCode;
	}
	
	/**
	 * 生成验证码图片
	 */
	public function CreateImage(){
		$this->mCheckImage=@imagecreate($this->mCheckImageWidth,$this->mCheckImageHeight);
		imagecolorallocate($this->mCheckImage,200,200,200);
		return $this->mCheckImage;
	}
	
	/**
	 * 设置干扰素
	 */
	public function SetDisturbColor(){
		for($i=0;$i<=128;$i++){
			$this->mDisturbColor=imagecolorallocate($this->mCheckImage,rand(0,255),rand(0,255),rand(0,255));
			imagesetpixel($this->mCheckImage,rand(2,128),rand(2,38), $this->mDisturbColor);
		}
	}
	
	/**
	 * 设置验证码图片的大小
	 * @param int $width
	 * @param int $height
	 */
	public function SetCheckImageWH(int $width,int $height){
		if($width==''||$height==''){
			return false;
		}
		$this->mCheckImageWidth=$width;
		$this->mCheckImageHeight=$height;
		return true;
	}
	
	/**
	 * 将验证码逐个画到验证图片上
	 */
	public function WriteCheckCodeToImage(){
		for($i=0;$i<$this->mCheckCodeNum;$i++){
			$bg_color=imagecolorallocate($this->mCheckImage,rand(0,255),rand(0,128),rand(0,255));
			//$i+0.3不让验证码从图片0位置开始画
			$x=floor($this->mCheckImageWidth/$this->mCheckCodeNum)*($i+0.3);
			$y=rand(0,$this->mCheckImageHeight-15);
			imagechar($this->mCheckImage,5,$x,$y,$this->mCheckCode[$i],$bg_color);
		}
	}
	
	/**
	 * 输出验证码图片
	 */
	public function OutCheckImage(){
		$this->OutFileHeader();
		$this->CreateCheckCode();
		$this->CreateImage();
		$this->SetDisturbColor();
		$this->WriteCheckCodeToImage();
		imagepng($this->mCheckImage);
		imagedestroy($this->mCheckImage);
	}
	
}
$check_code_image=new CheckCode();
$check_code_image->OutCheckImage();
?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值