php验证码共用类

支持可定制 是否点干扰,线干扰,字符是否倾斜及有无边框等


用法:

<?php
/**
* 验证码demo
* 
* @author 	zhaoxuejie<zxj198468@gmail.com>
* @date   	2012-2-20
* @version	v1.0
*/
session_start();
require_once('validate.class.php');
$image = new Validate(100, 20, 5);//图片宽度、高度、字符个数
$image->isOblique = false;//字符是否倾斜
//$image->isPoint = false;//字符是否显示点干扰
//$image->isLine = false;//字符是否显示线干扰
//$image->isBorder = false;//是否需要边框
$image->outputImg();
$_SESSION['authCode'] = $image->authCode; //存贮验证码到 $_SESSION 中
?>

类文件:

<?php
/**
* 验证码共用类
* 
* @author 	zhaoxuejie<zxj198468@gmail.com>
* @date   	2012-2-20
* @version	v1.0
*
* demo
* ------------------
* require_once('validate.class.php');
* $image = new validate(80, 25, 4);//图片宽度、高度、字符个数--可省略
* $image->outputImg();
* ---------------------------------------
*/
class Validate
{
	private $width;		//验证码宽度
	private $height;	//验证码高度
	private $codeNum;	//验证码字符个数
	private $codeContent = "2345689QWERTYUPASDFGHJKXCVBNM";//验证码字符内容
	private $checkImage; //验证码图片
	private $disturbColor = '';//干扰像素
	public  $noisePoint = 100;//点干扰数量
	public  $noiseLine = 8;//点干扰数量
	public  $font = './fonts/simhei.ttf';//字体,只有选中倾斜的时候 即$isOblique = true的时候有用
	public  $isPoint = true;//是否显示点干扰
	public  $isLine = true;//是否显示线干扰
	public  $isOblique = true;//字符是否倾斜
	public  $isBorder = true;//是否需要边框
	public  $authCode;	//产生的验证码
	
	//初始化
	function __construct($width=80, $height=21, $codeNum=4)
	{
	   $this->width=$width;
	   $this->height=$height;
	   $this->codeNum=$codeNum;
	   $this->createCode();//产生验证码
	}
	
	//兼容php4
	function Validate($width=80, $height=21, $codeNum=4){
		$this->__construct($width, $height, $codeNum);
	}
	
	function outputImg()
	{
	   $this->outFileHeader();//输出头
	   $this->createImage();//产生图片
	   $this->setDisturbColor();//设置干扰像素
	   $this->writeCheckCodeToImage();//往图片上写验证码
	   $this->createValidate();//生成验证码图片
	}

	//生成验证码
	private function createCode(){
		for ($i = 0; $i < $this->codeNum; $i++) {
            $this->authCode .= $this->codeContent{rand(0, strlen($this->codeContent) - 1)};
        }
	}
	
	//头图片类型
	private function outFileHeader()
	{
	   Header("Content-type:image/png");
	}
	
	//产生图片
	private function createImage()
	{
	   $this->checkimage = @imagecreate($this->width,$this->height);
	   $back = imagecolorallocate($this->checkimage,255,255,255);
	   if($this->isBorder){
	   		$border = imagecolorallocate($this->checkimage,0,0,0);		
	   }else{
	   		$border = imagecolorallocate($this->checkimage,255,255,255);
	   }
	   imagefilledrectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$back); // 白色底
	   imagerectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$border);   // 黑色边框
	}

	//设置干扰因素
	private function setDisturbColor()
	{
		if($this->isPoint){
			$this->createNoisePoint();//设置点干扰
		}
		if($this->isLine){
			$this->createNoiseLine();//设置线干扰
		}	   
	}

	//设置点干扰
	public function createNoisePoint(){
		for ($i = 0; $i <= $this->noisePoint; $i++)
		{
			$this->disturbColor = imagecolorallocate($this->checkimage, rand(0,255), rand(0,255), rand(0,255));
			imagesetpixel($this->checkimage,rand(2,128),rand(2,38),$this->disturbColor);
		}	 
	}
	
	//设置弧线干扰
	public function createNoiseLine(){
		for ($i = 0; $i <= $this->noiseLine; $i++) {
            $color = imagecolorallocate($this->checkimage, rand(128, 255), rand(125, 255), rand(100, 255));
            imagearc($this->checkimage, rand(0, $this->width), rand(0, $this->height), rand(30, 300), rand(20, 200), 50, 30, $color);
        }
	}
	
	//验证码写入图片
	private function writeCheckCodeToImage()
	{
	   for ($i=0;$i<=$this->codeNum;$i++)
	   {
		$bg_color = imagecolorallocate ($this->checkimage, rand(0,255), rand(0,128), rand(0,255));
		$size = rand(floor($this->height / 5), floor($this->height / 3));
		$x = (5+floor($this->width/$this->codeNum)*$i);
		if($this->isOblique){
			$y = rand(floor($this->height/2)+5, floor($this->height/2)+5);
			imagettftext($this->checkimage, rand(11, 14), rand(-35,35), $x, $y, $bg_color, $this->font, $this->authCode[$i]);
		}else{
			$y = ($this->height/2 - rand(3,10));
			imagechar ($this->checkimage, rand(5,12), $x, $y, $this->authCode[$i], $bg_color);
		}
	   }
	}
	
	//生成验证码图片
	private function createValidate(){
		imagepng($this->checkimage);
		imagedestroy($this->checkimage);
	}
	
	//获得验证码
	public function getCode(){
		return $this->authCode;
	}
	
	function __destruct()
	{
	   unset($this->width,$this->height,$this->codeNum);
	}
}
?>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值