<?php
if (!defined('puyuetian'))
	exit('Not Found puyuetian!Please contact QQ632827168');

//外部扩展验证码类
/*
 * 该验证码类资源来自互联网
 */
class ValidateCode {
	private $charset = '0123456789';
	//abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ
	//随机因子
	private $code;
	//验证码
	private $codelen = 4;
	//验证码长度
	private $width = 88;
	//宽度
	private $height = 32;
	//高度
	private $img;
	//图形资源句柄
	private $font;
	//指定的字体
	private $fontsize = 16;
	//指定字体大小
	private $fontcolor;
	//指定字体颜色
	//构造方法初始化
	public function __construct() {
		global $_G;
		$fontpath = $_G['SYSTEM']['PATH'] . '/app/verifycode/font/default.ttf';
		$this -> font = $fontpath;
		if ($_G['SET']['APP_VERIFYCODE_CHARS']) {
			$this -> charset = $_G['SET']['APP_VERIFYCODE_CHARS'];
		}
		if (Cnum($_G['SET']['APP_VERIFYCODE_WIDTH'])) {
			$this -> width = $_G['SET']['APP_VERIFYCODE_WIDTH'];
		}
		if (Cnum($_G['SET']['APP_VERIFYCODE_HEIGHT'])) {
			$this -> height = $_G['SET']['APP_VERIFYCODE_HEIGHT'];
		}
		if (Cnum($_G['SET']['APP_VERIFYCODE_LENGTH'])) {
			$this -> codelen = $_G['SET']['APP_VERIFYCODE_LENGTH'];
		}
		if (Cnum($_G['SET']['APP_VERIFYCODE_FONTSIZE'])) {
			$this -> fontsize = $_G['SET']['APP_VERIFYCODE_FONTSIZE'];
		}
	}

	//生成随机码
	private function createCode() {
		$_len = strlen($this -> charset) - 1;
		for ($i = 0; $i < $this -> codelen; $i++) {
			$this -> code .= $this -> charset[mt_rand(0, $_len)];
		}
	}

	//生成背景
	private function createBg() {
		$this -> img = imagecreatetruecolor($this -> width, $this -> height);
		$color = imagecolorallocate($this -> img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
		imagefilledrectangle($this -> img, 0, $this -> height, $this -> width, 0, $color);
	}

	//生成文字
	private function createFont() {
		$_x = $this -> width / $this -> codelen;
		for ($i = 0; $i < $this -> codelen; $i++) {
			$this -> fontcolor = imagecolorallocate($this -> img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
			imagettftext($this -> img, $this -> fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $this -> height / 1.4, $this -> fontcolor, $this -> font, $this -> code[$i]);
		}
	}

	//生成线条、雪花
	private function createLine() {
		//线条
		for ($i = 0; $i < 6; $i++) {
			$color = imagecolorallocate($this -> img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
			imageline($this -> img, mt_rand(0, $this -> width), mt_rand(0, $this -> height), mt_rand(0, $this -> width), mt_rand(0, $this -> height), $color);
		}
		//雪花
		for ($i = 0; $i < 100; $i++) {
			$color = imagecolorallocate($this -> img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
			imagestring($this -> img, mt_rand(1, 5), mt_rand(0, $this -> width), mt_rand(0, $this -> height), '*', $color);
		}
	}

	//输出
	private function outPut() {
		header('Content-type:image/png');
		imagepng($this -> img);
		imagedestroy($this -> img);
	}

	//对外生成
	public function doimg() {
		$this -> createBg();
		$this -> createCode();
		$this -> createLine();
		$this -> createFont();
		$this -> outPut();
	}

	//获取验证码
	public function getCode() {
		return strtolower($this -> code);
	}

}
?>