时间:2021-07-01 10:21:17 帮助过:25人阅读
本文实例讲述了php封装的验证码工具类。分享给大家供大家参考,具体如下:
输出验证码 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
- //验证码工具类
- 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)){
- //成功:
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。