Home Backend Development PHP Tutorial php图片验证码种

php图片验证码种

Jun 13, 2016 pm 12:50 PM
gt height image rand this

php图片验证码类

<?php /**
 * 图片验证码类
 * 生成图片类型验证码,验证码包含数字和大写字母,session中存放md5加密后的验证码
 * 
 * 使用方法:
 * $captcha = new Catpcha();
 * $captcha->buildAndExportImage();
 * 
 * 作          者: luojing
 * 创建时间: 2013-3-27 上午11:42:12
 */
class Captcha {
	
	private $width;//宽度
	private $height; //高度
	private $codeNum;//验证码字符数量
	private $image;//验证码图像资源
	private $sessionKey;//session中保存的名字
	private $captcha;//验证码字符串
	const charWidth = 10;//单个字符宽度,根据输出字符大小而变
	
	/**
	 * 创建验证码类,初始化相关参数
	 * @param  $width 图片宽度
	 * @param  $height 图片高度
	 * @param  $codeNum 验证码字符数量
	 * @param  $sessionKey session中保存的名字
	 */
	function __construct($width = 50, $height = 20, $codeNum = 4, $sessionKey = 'captcha') {
		$this-&gt;width = $width;
		$this-&gt;height = $height;
		$this-&gt;codeNum = $codeNum;
		$this-&gt;sessionKey = $sessionKey;
		
		//保证最小高度和宽度
		if($height height = 20;
		}
		if($width width = $codeNum * self::charWidth + 10;
		}
	}
	
	/**
	 * 构造并输出验证码图片
	 */
	public  function buildAndExportImage() {
		$this-&gt;createImage();
		$this-&gt;setDisturb();
		$this-&gt;setCaptcha();
		$this-&gt;exportImage();
	}
	
	/**
	 * 构造图像,设置底色
	 */
	private function createImage() {
		//创建图像
		$this-&gt;image = imagecreatetruecolor($this-&gt;width, $this-&gt;height);  
		//创建背景色
		$bg = imagecolorallocate($this-&gt;image, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));  
		//填充背景色
		imagefilledrectangle($this-&gt;image, 0, 0, $this-&gt;width - 1, $this-&gt;height - 1, $bg);
	}
	
	/**
	 * 设置干扰元素
	 */
	private function setDisturb() {
		
		//设置干扰点
		for($i = 0; $i image, mt_rand(150, 200),  mt_rand(150, 200),  mt_rand(150, 200));
			imagesetpixel($this-&gt;image, mt_rand(5, $this-&gt;width - 10), mt_rand(5, $this-&gt;height - 3), $color);
		}
		
		//设置干扰线
		for($i = 0; $i image, mt_rand(150, 220), mt_rand(150, 220), mt_rand(150, 220));
			imagearc($this-&gt;image, mt_rand(-10, $this-&gt;width), mt_rand(-10, $this-&gt;height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $color);
		}
		
		//创建边框色
		$border = imagecolorallocate($this-&gt;image, mt_rand(0, 50), mt_rand(0, 50), mt_rand(0, 50));
		//画边框
		imagerectangle($this-&gt;image, 0, 0, $this-&gt;width - 1, $this-&gt;height - 1, $border);
	}
	
	/**
	 * 产生并绘制验证码
	 */
	private function setCaptcha() {
		$str = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
		//生成验证码字符
		for($i = 0; $i codeNum; $i++) {
			$this-&gt;captcha .= $str{mt_rand(0, strlen($str) - 1)};
		}
		//绘制验证码
		for($i = 0; $i captcha); $i++) {
			$color = imagecolorallocate($this-&gt;image, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200));
			$x = floor(($this-&gt;width - 10)/$this-&gt;codeNum);
			$x = $x*$i + floor(($x-self::charWidth)/2) + 5;
			$y = mt_rand(2, $this-&gt;height - 20);
			imagechar($this-&gt;image, 5, $x, $y, $this-&gt;captcha{$i}, $color);
		}
	}
	
	/*
	 * 输出图像,验证码保存到session中
	 */
	private function exportImage() {
		if(imagetypes() &amp; IMG_GIF){
			header('Content-type:image/gif');
			imagegif($this-&gt;image);
		} else if(imagetypes() &amp; IMG_PNG){
			header('Content-type:image/png');  
         	imagepng($this-&gt;iamge);
		} else if(imagetypes() &amp; IMG_JPEG) {
			header('Content-type:image/jpeg');  
         	imagepng($this-&gt;iamge);
		} else {
			imagedestroy($this-&gt;image);
			die("Don't support image type!");
		}
		//将验证码信息保存到session中,md5加密
		if(!isset($_SESSION)){
    		session_start();
		} 
		$_SESSION[$this-&gt;sessionKey] = md5($this-&gt;captcha);
		
        imagedestroy($this-&gt;image);  
	}
	
	function __destruct() {
		unset($this-&gt;width, $this-&gt;height, $this-&gt;codeNum,$this-&gt;captcha);
	}
}
Copy after login

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article

Hot Article

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the differences between Huawei GT3 Pro and GT4? What are the differences between Huawei GT3 Pro and GT4? Dec 29, 2023 pm 02:27 PM

What are the differences between Huawei GT3 Pro and GT4?

How to solve 'undefined: rand.Seed' error in golang? How to solve 'undefined: rand.Seed' error in golang? Jun 25, 2023 am 08:34 AM

How to solve 'undefined: rand.Seed' error in golang?

Fix: Snipping tool not working in Windows 11 Fix: Snipping tool not working in Windows 11 Aug 24, 2023 am 09:48 AM

Fix: Snipping tool not working in Windows 11

How to use Bing Image Creator for free How to use Bing Image Creator for free Feb 27, 2024 am 11:04 AM

How to use Bing Image Creator for free

How to delete images from Xiaomi phones How to delete images from Xiaomi phones Mar 02, 2024 pm 05:34 PM

How to delete images from Xiaomi phones

How to Fix Can't Connect to App Store Error on iPhone How to Fix Can't Connect to App Store Error on iPhone Jul 29, 2023 am 08:22 AM

How to Fix Can't Connect to App Store Error on iPhone

How to synchronize random number generation in Golang parallel processing? How to synchronize random number generation in Golang parallel processing? Jun 03, 2024 pm 02:53 PM

How to synchronize random number generation in Golang parallel processing?

Imagemagic installation Centos and Image installation tutorial Imagemagic installation Centos and Image installation tutorial Feb 12, 2024 pm 05:27 PM

Imagemagic installation Centos and Image installation tutorial

See all articles