PHP封装的验证码工具类定义与用法示例

这篇文章主要介绍了PHP封装的验证码工具类定义与用法,结合完整实例形式详细分析了php封装的验证码工具类相关图片创建、随机字符串、验证码验证等功能定义与使用技巧,需要的朋友可以参考下。

本文实例讲述了PHP封装的验证码工具类定义与用法,分享给大家供大家参考,具体如下:

下面分享的是我自己封装的验证码工具类,在平时的项目中会比较经常用到的工具类,目前封装的这个工具类简易版的,如果有需要的伙伴可以拿去用,当然我建议用之前在配置文件里增加一些选项信息

  1. //验证码宽度
  2. private $width;
  3. //验证码高度
  4. private $height;
  5. //验证的个数
  6. private $length;
  7. //干扰点个数
  8. private $dots;
  9. //干扰点的类型
  10. private $type;
  11. //干扰线个数
  12. private $lines;
  13. //文字
  14. private $font;

方便在项目中对验证码的要求进行更改,以方便项目逻辑的需求,而且验证码所选用的字体需要和验证码工具类放在同一目录下,否则就要在配置文件中修改字体的路径才能实现验证码的显示

  1. <?php
  2. //创建验证码工具类
  3. class captcha {
  4. //验证码的各种参数
  5. //验证码宽度
  6. private $width;
  7. //验证码高度
  8. private $height;
  9. //验证的个数
  10. private $length;
  11. //干扰点个数
  12. private $dots;
  13. //干扰点的类型
  14. private $type;
  15. //干扰线个数
  16. private $lines;
  17. //文字
  18. private $font;
  19. //验证码属性的构造方法
  20. public function __construct($arr = array ()) {
  21. //将属性赋值
  22. $this->width = isset ($arr['width']) ? trim($arr['width']) : '270';
  23. $this->height = isset ($arr['height']) ? trim($arr['height']) : '30';
  24. $this->length = isset ($arr['length']) ? trim($arr['length']) : '4';
  25. $this->dots = isset ($arr['dots']) ? trim($arr['dots']) : '81';
  26. $this->type = isset ($arr['type']) ? trim($arr['type']) : '*';
  27. $this->lines = isset ($arr['lines']) ? trim($arr['lines']) : '5';
  28. $this->font = isset ($arr['font']) ? trim($arr['font']) : './cambriab.ttf';
  29. }
  30. //创建验证码的方法
  31. public function captcha() {
  32. //创建画布
  33. $img = imagecreatetruecolor($this->width, $this->height);
  34. //填充颜色
  35. //颜色资源
  36. $color = imagecolorallocate($img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
  37. //填充背景
  38. imagefill($img, 0, 0, $color);
  39. //添加干扰点
  40. for ($i = 0; $i < $this->dots; $i++) {
  41. //颜色资源
  42. $dots_color = imagecolorallocate($img, mt_rand(150, 200), mt_rand(150, 200), mt_rand(150, 200));
  43. //插入干扰点
  44. imagestring($img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), $this->type, $dots_color);
  45. }
  46. //添加干扰线
  47. for ($i = 0; $i < $this->lines; $i++) {
  48. //颜色资源
  49. $line_color = imagecolorallocate($img, mt_rand(150, 200), mt_rand(150, 200), mt_rand(150, 200));
  50. //插入干扰线
  51. imageline($img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $line_color);
  52. }
  53. //首先获取验证码,然后插入验证文字
  54. //文字高度
  55. $size = mt_rand(18, 20);
  56. //获取验证码
  57. $str = $this->captchastring();
  58. for ($i = 0; $i < strlen($str); $i++) {
  59. //颜色资源
  60. $str_color = imagecolorallocate($img, mt_rand(50, 150), mt_rand(50, 150), mt_rand(50, 150));
  61. //插入验证码
  62. imagettftext($img, $size, mt_rand(-45, 45), $this->width / ($this->length + 2) * ($i +1), (($this->height - $size) / 2) + $size, $str_color, $this->font, $str[$i]);
  63. }
  64. //将得到的验证码存入SESSION中,便于以后的验证码判断
  65. @ session_start();
  66. $_SESSION['captcha'] = $str;
  67. //输出图片
  68. header("content-type:image/png");
  69. imagepng($img);
  70. //清除资源
  71. imagedestroy($img);
  72. }
  73. //获取随机的验证内容:A-Z,a-z,1-9
  74. private function captchaString() {
  75. //获取四个随机的字符串
  76. $str = "";
  77. for ($i = 0; $i < $this->length; $i++) {
  78. switch (mt_rand(1, 3)) {
  79. case 1 :
  80. $str .= chr(mt_rand(49, 57));
  81. break;
  82. case 2 :
  83. $str .= chr(mt_rand(97, 122));
  84. break;
  85. case 3 :
  86. $str .= chr(mt_rand(65, 90));
  87. break;
  88. }
  89. }
  90. return $str;
  91. }
  92. //判断验证码
  93. public static function checkCaptcha($captcha) {
  94. @ session_start();
  95. return strtoupper($captcha) === strtoupper($_SESSION['captcha']);
  96. }
  97. }
  98. //使用方法:
  99. $img = new captcha();//这里采用默认参数
  100. $img->captcha();
  101. ?>