codetc - 网站开发技术 首页 代码 PHP 查看内容

好用的PHP验证码类,强烈推荐

2014-10-19 22:34| 发布者: CODETC| 查看: 3299| 评论: 0

一个简单的PHP验证码类
<?php
/**
* @version1.0
* @PHP验证码类
* 使用方法:
* $image=newCaptcha();
* $image->config('宽度','高度','字符个数','验证码session索引');
* $image->create();
* 如:
* newCaptcha(80,20,4,'captcha_code');
* 所有参数都可以省略,
* 默认是:宽80高20字符数4验证码session索引captcha_code
* 第四个参数即把验证码存到$_SESSION['captcha_code']
* 最简单使用示例:
* $image=newCaptcha();
* $image->create();
*/
class Captcha
{
	private $width=80,$height=20,$codenum=4;
	public $checkcode;	//产生的验证码
	private $checkimage;	//验证码图片
	private $disturbColor='';//干扰像素
	private $session_flag='captcha_code';//存到session中的索引

	//尝试开始session
	function __construct(){
		@session_start();
	}

	/*
	*参数:(宽度,高度,字符个数)
	*/
	function config($width='80',$height='20',$codenum='4',$session_flag='captcha_code')
	{
		$this->width=$width;
		$this->height=$height;
		$this->codenum=$codenum;
		$this->session_flag=$session_flag;
	}

	function create()
	{
		//输出头
		$this->outFileHeader();
		//产生验证码
		$this->createCode();

		//产生图片
		$this->createImage();
		//设置干扰像素
		$this->setDisturbColor();
		//往图片上写验证码
		$this->writeCheckCodeToImage();
		imagepng($this->checkimage);
		imagedestroy($this->checkimage);
		$_SESSION[$this->session_flag]=$this->checkcode;
	}

	/*
	*@brief输出头
	*/
	private function outFileHeader()
	{
		header("Content-type:image/png");
	}

	/**
	*产生验证码
	*/
	private function createCode()
	{
		$this->checkcode=strtoupper(substr(md5(rand()),0,$this->codenum));
	}

	/**
	*产生验证码图片
	*/
	private function createImage()
	{
		$this->checkimage=@imagecreate($this->width,$this->height);
		$back=imagecolorallocate($this->checkimage,255,255,255);
		$border=imagecolorallocate($this->checkimage,0,0,0);
		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()
	{
		for($i=0;$i<=200;$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);
		}
	}

	/**
	*
	*在验证码图片上逐个画上验证码
	*
	*/
	private function writeCheckCodeToImage()
	{
		for($i=0;$i<$this->codenum;$i++)
		{
			$bg_color=imagecolorallocate($this->checkimage,rand(0,255),rand(0,128),rand(0,255));
			$x=floor($this->width/$this->codenum)*$i;
			$y=rand(0,$this->height-15);
			imagechar($this->checkimage,rand(5,8),$x+5,$y,$this->checkcode[$i],$bg_color);
		}
	}

	function __destruct()
	{
		unset($this->width,$this->height,$this->codenum,$this->session_flag);
	}
}
?>
文章来源 CODETC,欢迎分享,转载请注明地址: http://www.codetc.com/article-11-1.html

最新评论

 作为游客发表评论,请输入您的昵称

返回顶部