<?php
/*
* 验证码类
*/
class CAPTCHA
{
//成员属性
private $_width = 100;//画布宽度
private $_height = 30;//画布宽度
private $_charnum = 4;//验证码字符个数
private $_fontfile = 'D:\XAMPP\htdocs\zxd\font\msyh.ttf';//验证码字体文件
private $_fontsize = '20';//字体大小
public function __set($p, $v)
{
if(property_exists($this, $p)){
$this -> $p = $v;
}
// TODO: Implement __set() method.
}
public function __get($p)
{
if(property_exists($this, $p)){
return $this->$p;
}
// TODO: Implement __get() method.
}
//生成随机字符
public function makeCode(){
//大写字母
$upper = range('A', 'Y');
//小写字母
$lower = range('a', 'y');
//数字
$number = range('3', '9');
//把三个数组合并
$code = array_merge($upper, $lower, $number);
//打乱数组
shuffle($code);
//生成验证码
$str = '';
for($i = 0; $i < $this->_charnum; $i++){
$str .= $code[$i];
}
return $str;
}
//开始绘制验证码
public function makeImage(){
//1.创建画布.注意背景颜色不能是深色,否则会看不清验证码
$image = imagecreatetruecolor($this->_width, $this->_height);
//分配颜色
$color = imagecolorallocate($image, mt_rand(100,255), mt_rand(100,255), mt_rand(100,255));
//填充画布
imagefill($image, 0,0,$color);
//调用makeCode()获取验证码
$code = $this->makeCode();
for($i = 0; $i < strlen($code); $i++){
imagettftext($image, $this->_fontsize, mt_rand(-30,30), $this->_width/$this->_charnum*$i+5, 23,mt_rand(0,100), $this->_fontfile, $code[$i]);
}
//绘制100个干扰像素点
for($i=0; $i<100; $i++){
imagesetpixel($image, mt_rand(0,$this->_width), mt_rand(0,$this->_height), mt_rand(0,100));
}
//绘制一条干扰线条
imageline($image, 5, mt_rand(0,$this->_height), $this->_width-5, mt_rand(0, $this->_height), mt_rand(0,100));
//输出到浏览器
header("Content-Type:image/png");
imagepng($image);
//销毁图像
imagedestroy($image);
}
}
使用时直接创建一个验证码类的对象,并且调用makeImage()方法即可
<?php
require "CAPTCHA.php";
$captcha = new CAPTCHA();
$captcha->makeImage();
效果图