Captcha.php
0) {
if (isset($config['fontfile']) && is_file($config['fontfile']) && is_readable($config['fontfile'])) {
$this->_fontfile = $config['fontfile'];
} else {
return false;
}
//检测是否设置字体大小
if (isset($config['size']) && $config['size'] > 0) {
$this->_size = (int)$config['size'];
}
//检测是否设置画布宽度
if (isset($config['width']) && $config['width'] > 0) {
$this->_width = (int)$config['width'];
}
//检测是否设置画布高度
if (isset($config['height']) && $config['height'] > 0) {
$this->_height = (int)$config['height'];
}
//检测是否设置验证码长度
if (isset($config['length']) && $config['length'] > 0) {
$this->_length = (int)$config['length'];
}
//配置干扰元素
if (isset($config['pixel']) && $config['pixel'] > 0) {
$this->_pixel = $config['pixel'];
}
if (isset($config['snow']) && $config['snow'] > 0) {
$this->_snow = $config['snow'];
}
if (isset($config['line']) && $config['line'] > 0) {
$this->_line = $config['line'];
}
$this->_image = imagecreatetruecolor($this->_width, $this->_height);
return $this->_image;
} else {
return false;
}
}
/**
* 得到验证码
* @return bool|string
*/
public function getCaptcha()
{
$white = imagecolorallocate($this->_image, 255, 255, 255);
imagefilledrectangle($this->_image, 0, 0, $this->_width, $this->_height, $white);
//生成验证码
$str = $this->_generateStr($this->_length);
if (false == $str) {
return false;
}
//绘制验证码
$fontfile = $this->_fontfile;
for ($i = 0; $i < $this->_length; $i++) {
$size = $this->_size;
$angle = mt_rand(-30, 30);
$x = ceil($this->_width / $this->_length) * $i + mt_rand(5, 10);
$y = ceil($this->_height / 1.5);
$color = $this->_getRandColor();
//$text = mb_substr($str, $i, 1, 'utf-8');
$text = $str{$i};
imagettftext($this->_image, $size, $angle, $x, $y, $color, $fontfile, $text);
}
//* -- 像素和线段
if ($this->_snow) {
$this->_getSnow();
} else {
if ($this->_pixel) {
$this->_getPixel();
}
if ($this->_line) {
$this->_getLine();
}
}
//输出图像
header('content-type:image/png');
imagepng($this->_image);
imagedestroy($this->_image);
return strtolower($str);
}
private function _getSnow()
{
for ($i = 1; $i <= $this->_snow; $i++) {
imagestring($this->_image, mt_rand(1, 5), mt_rand(0, $this->_width),
mt_rand(0, $this->_height), '*', $this->_getRandColor());
}
}
private function _getPixel()
{
for ($i = 1; $i <= $this->_pixel; $i++) {
imagesetpixel($this->_image, mt_rand(0, $this->_width), mt_rand(0, $this->_height), $this->_getRandColor());
}
}
/**
* 绘制线段
*/
private function _getLine()
{
for ($i = 1; $i <= $this->_line; $i++) {
imageline($this->_image, mt_rand(0, $this->_width), mt_rand(0, $this->_height),
mt_rand(0, $this->_width), mt_rand(0, $this->_height), $this->_getRandColor());
}
}
/**
* 产生验证码字符
* @param int $length
* @return bool|string
*/
private function _generateStr($length = 4)
{
if ($length < 1 || $length > 30) {
return false;
}
$chars = array('a', 'b', 'c', 'e', 'f', 'g', 'h', 'k', 'm', 'n', 'p', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'K', 'M', 'N', 'P', 'X', 'Y', 'Z',
1, 2, 3, 4, 5, 6, 7, 8, 9
);
$str = join('', array_rand(array_flip($chars), $length));
return $str;
}
private function _getRandColor()
{
return imagecolorallocate($this->_image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
}
}
?>
testCaptcha.php
'fonts/couri.ttf',
'pixel' => 20,
'line' => 3
);
$captcha = new Captcha($config);
session_start();
$_SESSION['verifyName'] = $captcha->getCaptcha();
reg.php
注册页面
IMOOC注册页面
doAction.php
";
var_dump($_SESSION);
?>