当前位置:Gxlcms > PHP教程 > php封装的验证码工具类完整实例

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

时间:2021-07-01 10:21:17 帮助过:25人阅读

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

  1. <?php
  2. //验证码工具类
  3. class Captcha{
  4. //属性
  5. private $width;
  6. private $height;
  7. private $fontsize;
  8. private $pixes;
  9. private $lines;
  10. private $str_len;
  11. /*
  12. * 构造方法
  13. * @param1 array $arr = array(),初始化属性的关联数组
  14. */
  15. public function __construct($arr = array()){
  16. //初始化
  17. $this->width = isset($arr['width']) ? $arr['width'] : $GLOBALS['config']['captcha']['width'];
  18. $this->height = isset($arr['height']) ? $arr['height'] : $GLOBALS['config']['captcha']['height'];
  19. $this->fontsize = isset($arr['fontsize']) ? $arr['fontsize'] : $GLOBALS['config']['captcha']['fontsize'];
  20. $this->pixes = isset($arr['pixes']) ? $arr['pixes'] : $GLOBALS['config']['captcha']['pixes'];
  21. $this->lines = isset($arr['lines']) ? $arr['lines'] : $GLOBALS['config']['captcha']['lines'];
  22. $this->str_len = isset($arr['str_len']) ? $arr['str_len'] : $GLOBALS['config']['captcha']['str_len'];
  23. }
  24. /*
  25. * 产生验证码图片
  26. */
  27. public function generate(){
  28. //制作画布
  29. $img = imagecreatetruecolor($this->width,$this->height);
  30. //给定背景色
  31. $bg_color = imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
  32. imagefill($img,0,0,$bg_color);
  33. //制作干扰线
  34. $this->getLines($img);
  35. //增加干扰点
  36. $this->getPixels($img);
  37. //增加验证码文字
  38. $captcha = $this->getCaptcha();
  39. //文字颜色
  40. $str_color = imagecolorallocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
  41. //写入文字
  42. //计算文字应该出现的起始位置
  43. $start_x = ceil($this->width/2) - 25;
  44. $start_y = ceil($this->height/2) - 8;
  45. if(imagestring($img,$this->fontsize,$start_x,$start_y,$captcha,$str_color)){
  46. //成功:
输出验证码 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相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

人气教程排行