本文实例讲述了PHP封装的验证码工具类。分享给大家供大家参考,具体如下:
PHP;">
width = isset($arr['width']) ? $arr['width'] : $GLOBALS['config']['captcha']['width'];
$this->height = isset($arr['height']) ? $arr['height'] : $GLOBALS['config']['captcha']['height'];
$this->fontsize = isset($arr['fontsize']) ? $arr['fontsize'] : $GLOBALS['config']['captcha']['fontsize'];
$this->pixes = isset($arr['pixes']) ? $arr['pixes'] : $GLOBALS['config']['captcha']['pixes'];
$this->lines = isset($arr['lines']) ? $arr['lines'] : $GLOBALS['config']['captcha']['lines'];
$this->str_len = isset($arr['str_len']) ? $arr['str_len'] : $GLOBALS['config']['captcha']['str_len'];
}
/*
* 产生验证码图片
*/
public function generate(){
//制作画布
$img = imagecreatetruecolor($this->width,$this->height);
//给定背景色
$bg_color = imagecolorallocate($img,mt_rand(200,255),255));
imagefill($img,$bg_color);
//制作干扰线
$this->getLines($img);
//增加干扰点
$this->getPixels($img);
//增加验证码文字
$captcha = $this->getCaptcha();
//文字颜色
$str_color = imagecolorallocate($img,mt_rand(0,100),100));
//写入文字
//计算文字应该出现的起始位置
$start_x = ceil($this->width/2) - 25;
$start_y = ceil($this->height/2) - 8;
if(imagestring($img,$this->fontsize,$start_x,$start_y,$captcha,$str_color)){
//成功:输出验证码
header('Content-type:image/png');
imagepng($img);
}else{
//失败
return false;
}
}
/*
* 获取验证码随机字符串
* @return string $captcha,随机验证码文字
*/
private function getCaptcha(){
//获取随机字符串
$str = implode('',array_merge(range('a','z'),range('A','Z'),range(1,9)));
//随机取
$captcha = ''; //保存随机字符串
for($i = 0,$len = strlen($str);$i < $this->str_len;$i++){
//每次随机取一个字符
$captcha .= $str[mt_rand(0,$len - 1)] . ' ';
}
//将数据保存到session
$_SESSION['captcha'] = str_replace(' ','',$captcha);
//返回值
return $captcha;
}
/*
* 增加干扰点
* @param1 resource $img
*/
private function getPixels($img){
//增加干扰点
for($i = 0;$i < $this->pixes;$i++){
//分配颜色
$pixel_color = imagecolorallocate($img,mt_rand(100,150),150));
//画点
imagesetpixel($img,$this->width),$this->height),$pixel_color);
}
}
/*
* 增加干扰线
* @param1 resource $img,要增加干扰线的图片资源
*/
private function getLines($img){
//增加干扰线
for($i = 0;$i < $this->lines;$i++){
//分配颜色
$line_color = imagecolorallocate($img,mt_rand(150,200),200));
//画线
imageline($img,$line_color);
}
}
/*
* 验证验证码
* @param1 string $captcha,用户提交的验证码
* @return bool,成功返回true,失败返回false
*/
public static function checkCaptcha($captcha){
//验证码不区分大小写
return (strtolower($captcha) === strtolower($_SESSION['captcha']));
}
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》、《》及《PHP常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://www.f2er.com/php/18730.html