PHP面向对象简易验证码类

PHP简易验证码类

  1 <?php
  2
  3 class authCode
  4 {
  5     private static $instance = null;     #实例对象
  6     private $width = 120;                #图片宽度
  7     private $height = 40;                #图片高度
  8     private $font = ‘font/elephant.ttf‘; #字体文件路径
  9     private $fontSize = 14;              #字体大小
 10     private $strLen = 6;                 #字符个数
 11     private $auth_code_str = null;       #验证码结果
 12     private $imgResult = null;           #图片资源
 13
 14     #入口文件 静态方法调用 实例化对象 可用 对象方法调用
 15     public static function img()
 16     {
 17         if (!(self::$instance instanceof self)) {
 18             self::$instance = new self();
 19         }
 20         return self::$instance;
 21     }
 22
 23      #随机颜色
 24     private function randomColor($img = null, $min = 0, $max = 255)
 25     {
 26         $rgb = [];
 27         for ($i = 1; $i <= 3; $i++) {
 28             $rgb[] = str_pad(rand($min, $max), 3, 0, STR_PAD_LEFT);
 29         }
 30         return imagecolorallocate($img, $rgb[0], $rgb[1], $rgb[2]);
 31     }
 32
 33     #随机字符串
 34     private function randomStr($num = 4)
 35     {
 36         if ($num > 0) {
 37             $string = array_merge(range(‘a‘, ‘z‘), range(0, 9), range(‘A‘, ‘Z‘), range(0, 9));
 38             for ($i = 1; $i <= $num; $i++) {
 39                 shuffle($string);
 40                 $this->auth_code_str .= array_pop($string);
 41             }
 42         }
 43         return $this;
 44     }
 45
 46      #创建验证码
 47     public function createAuthCode(&$codeStr = false)
 48     {
 49         if (!$this->auth_code_str) {
 50             $this->randomStr($this->strLen);
 51         }
 52
 53         if ($codeStr !== false && empty($codeStr)) {
 54             $codeStr = $this->auth_code_str;
 55         } else if (!empty($codeStr) && $codeStr !== false) {
 56             $this->auth_code_str = $codeStr;
 57         }
 58
 59         $this->imgResult = imagecreatetruecolor($this->width, $this->height);
 60
 61         $background = $this->randomColor($this->imgResult, 200);
 62
 63         imagefilledrectangle($this->imgResult, 0, 0, $this->width, $this->height, $background);
 64
 65         $y = ($this->height - $this->fontSize);
 66
 67         $string = str_split($this->auth_code_str, 1);
 68
 69         for ($i = 0; $i < count($string); $i++) {
 70             $frontColor = $this->randomColor($this->imgResult, 0, 200);
 71             imagefttext($this->imgResult, $this->fontSize, rand(0, 10), ($this->fontSize + 2) * $i + 10, $y, $frontColor, $this->font, $string[$i]);
 72         }
 73         return $this;
 74     }
 75
 76     #生成线
 77     public function line($line = 3)
 78     {
 79         $line = $line ?: 3;
 80         for ($i = 1; $i <= $line; $i++) {
 81             $lineColor = $this->randomColor($this->imgResult, 0, 200);
 82             imageline($this->imgResult, rand(0, $this->width / 5), rand(5, $this->height - 5), rand($this->width / 1.3, $this->width), rand(5, $this->height - 5), $lineColor);
 83         }
 84         return $this;
 85     }
 86
 87     #噪点
 88     public function pixel($num = 50){
 89         $num = $num ?: 3;
 90         for ($i = 1; $i <= $num; $i++) {
 91             $lineColor = $this->randomColor($this->imgResult, 0, 100);
 92             imagesetpixel($this->imgResult, rand(0, $this->width), rand(0, $this->height), $lineColor);
 93         }
 94         return $this;
 95     }
 96
 97     #设置大小
 98     public function size($width = null, $height = null)
 99     {
100         $this->width = $width ?: 120;
101         $this->height = $height ?: 40;
102         return $this;
103     }
104
105     #设置字体大小
106     public function fontSize($fontsize = 14)
107     {
108         $this->fontSize = $fontsize ?: 14;
109         return $this;
110     }
111
112     #设置字体
113     public function font($file = null)
114     {
115         if (is_null($file) === true) {
116             $this->font = ‘font/elephant.ttf‘;
117         } else {
118             $this->font = $file;
119         }
120         return $this;
121     }
122
123     #设置长度
124     public function strlen($num = null)
125     {
126         $this->strLen = $num ?: 6;
127         return $this;
128     }
129
130     public function display()
131     {
132         ob_end_flush();
133         header("content-type:image/jpeg");
134         imagejpeg($this->imgResult, null, 100);
135         imagedestroy($this->imgResult);
136         exit;
137     }
138 }
139
140 #简单调用方法
141 authCode::img()->createAuthCode()->display();
142
143
144 #指定字符串调用
145 // $string = ‘abc123‘;
146 // authCode::img()->createAuthCode($string)->display();
147
148
149 #设置图片大小、字数、字体大小
150 // authCode::img()->strlen(8)->size(300,100)->fontSize(30)->createAuthCode()->display();
151
152
153 #添加噪点
154 // authCode::img()->createAuthCode()->line()->pixel()->display();
155
156
157     ?>

以上便是关于验证码类的封装过程,可以直接使用。

链接:https://mp.weixin.qq.com/s/7RrGadoaN-If72N30LGEEw

原文地址:https://www.cnblogs.com/clubs/p/11443625.html

时间: 2024-11-10 14:50:37

PHP面向对象简易验证码类的相关文章

面向对象中的验证码类

<?php /** * 验证码类 */ class Verify { //成员属性 private $width; //宽 private $height; //高 private $verify_code; //验证码字符串 private $verify_nums; //验证码个数 private $verify_type; //验证码字符类型 private $image_type; //图片类型(JPG/PNG) private $res; //图片资源 //构造函数来执行需要初始化的成

PHP验证码类

通过PHP的GD库图像处理内容,设计一个验证码类Vcode.将该类声明在文件vcode.class.php中,并通过面向对象的特性将一些实现的细节封装在该类中.只要在创建对象时,为构造方法提供三个参数,包括创建验证码图片的宽度.高度及验证码字母个数,就可以成功创建一个验证码类的对象.该类的声明代码如下所示: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

一个经典的PHP验证码类分享

我们通过PHP的GD库图像处理内容,设计一个验证码类Vcode.将该类声明在文件vcode.class.php中,并通过面向对象的特性将一些实现 的细节封装在该类中.只要在创建对象时,为构造方法提供三个参数,包括创建验证码图片的宽度.高度及验证码字母个数,就可以成功创建一个验证码类的对象. 该类的声明代码如下所示: <?php class Vcode { private $width; //宽 private $height; //高 private $num; //数量 private $co

ThinkPHP 3.2.3 加减乘法验证码类

ThinkPHP 3.2.3 自带的验证码类位于 /ThinkPHP/Library/Think/Verify.class.php,字体文件位于 /ThinkPHP/Library/Think/Verify/ 可以在 Verify.class.php 文件内进行修改,也可以单独写一个类继承自带的验证码类.如果单独写一个继承的类,可以重用父类的属性和方法,但是要注意的是父类中有一些属性和方法是私有(private)的,可以修改这些私有的属性和方法为保护(protected)的,如果不希望修改框架自

建立一个漂亮的PHP验证码类文件及调用方式

//验证码类class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子 private $code;//验证码 private $codelen = 4;//验证码长度 private $width = 130;//宽度 private $height = 50;//高度 private $img;//图形资源句柄 private $font;//指定的字体

面向对象中类和类的关系

在面向对象方法中,我们在确定了类及类的属性和方法后.不可避免的要研究类和类之间的关系,正是这些关系将整个事情串联起来.使彼此之间有了联系,就像现实生活中,人与人交往中存在着不同的关系. 了解这些关系,对于我们开发系统百利而无一害,能够让我们轻松.高效的工作,相同像我们在日常生活中处理好人与人之间的关系.会给我们带来巨大的优点.那么我们就来认识一下.面向对象中类与类之间有那些关系. 类和类之间的关系大概能够分为一下几种类型:泛化关系(Generalization).实现关系(realization

PHP之验证码类

<?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/6/20 * Time: 14:29 */ Class captcha{ //验证码类 protected $str="xaaxqwe556232assd"; //随机数 protected $code; //验证码 protected $length=4; //验证码长度 protected $width=80; //验证码宽度 protect

php 简易验证码(GD库)

论坛中为了防止灌水,出现了很多的验证码的插件,现在这里介绍一个非常简单的自定义验证码函数,这个验证码实现的原理就是通过php扩展的gd库来实现的. 给出百度百科对验证码的定义"验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序.可以防止:恶意破解密码.刷票.论坛灌

2Python全栈之路系列之面向对象进阶及类成员

Python全栈之路系列之面向对象进阶及类成员 再次了解多继承 先来一段代码 #!/usr/bin/env python # _*_ coding:utf-8 _*_ class A:     def bar(self):         print("BAR")         self.f1()          class B(A):     def f1(self):         print("B")          class C:     def