php教程

超轻量级php框架startmvc

php封装的验证码工具类完整实例

更新时间:2020-03-13 10:27:46 作者:startmvc
本文实例讲述了php封装的验证码工具类。分享给大家供大家参考,具体如下:<?php//验

本文实例讲述了php封装的验证码工具类。分享给大家供大家参考,具体如下:


<?php
//验证码工具类
class Captcha{
 //属性
 private $width;
 private $height;
 private $fontsize;
 private $pixes;
 private $lines;
 private $str_len;
 /*
 * 构造方法
 * @param1 array $arr = array(),初始化属性的关联数组
 */
 public function __construct($arr = array()){
 //初始化
 $this->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),mt_rand(200,255),mt_rand(200,255));
 imagefill($img,0,0,$bg_color);
 //制作干扰线
 $this->getLines($img);
 //增加干扰点
 $this->getPixels($img);
 //增加验证码文字
 $captcha = $this->getCaptcha();
 //文字颜色
 $str_color = imagecolorallocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,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),mt_rand(100,150),mt_rand(100,150));
 //画点
 imagesetpixel($img,mt_rand(0,$this->width),mt_rand(0,$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),mt_rand(150,200),mt_rand(150,200));
 //画线
 imageline($img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$line_color);
 }
 }
 /*
 * 验证验证码
 * @param1 string $captcha,用户提交的验证码
 * @return bool,成功返回true,失败返回false
 */
 public static function checkCaptcha($captcha){
 //验证码不区分大小写
 return (strtolower($captcha) === strtolower($_SESSION['captcha']));
 }
}

php 验证码 工具类