PHP学习之验证码类
<?php
$code = new Code();
$code->outImage();
class Code
{
//验证码个数
protected $number;
//验证码类型
protected $codeType;
//图像宽度
protected $width;
//图像高度
protected $height;
//图像资源
protected $image;
//验证码字符串
protected $code; /**
* Undocumented function
*
* @param integer $number
* @param integer $codeType
* @param integer $width
* @param integer $height
*/
public function __construct($number = 4, $codeType = 2, $width = 100, $height = 50)
{
//初始化自己的成员属性
$this->number = $number;
$this->codeType = $codeType;
$this->width = $width;
$this->height = $height; //生成验证码函数
$this->code = $this->createCode();
} /**
* 析构函数
* 释放图像资源
*/
public function __destruct()
{
//释放图像资源
imagedestroy($this->image);
} /**
* //魔术方法 通过对象获取保护的code
* $code = new Code();
* echo $code->code;
*
* @param [type] $name
* @return void
*/
public function __get($name)
{
if ($name == 'code') {
return $this->code;
}
return false;
} /**
* 获取验证码
*
* @return void
*/
protected function createCode()
{
//通过你的验证码类型给你生成不同的验证码
switch ($this->codeType) {
case 0: //纯数字
$code = $this->getNumberCode();
break;
case 1: //纯字母
$code = $this->getCharCode();
break;
case 2: //字母和数字混合
$code = $this->getNumCharCode();
break;
default:
die('不支持这种验证码类型');
}
return $code;
} /**
* 生成纯数字验证码
*
* @return void
*/
protected function getNumberCode()
{
// $startNum = pow(10, $this->number - 1);
// $endNum = pow(10, $this->number) - 1;
// $str = rand($startNum, $endNum);
// return $str;
$str = join('', range(0, 9));
return substr(str_shuffle($str), 0, $this->number);
} /**
* 生成纯字母验证码
*
* @return void
*/
protected function getCharCode()
{
$str = join('', range('a', 'z'));
$str = $str . strtoupper($str);
return substr(str_shuffle($str), 0, $this->number);
} /**
* 生成字母和数字验证码
*
* @return void
*/
protected function getNumCharCode()
{
$numStr = join('', range(0, 9));
$str = join('', range('a', 'z'));
$str = $numStr . $str . strtoupper($str);
return substr(str_shuffle($str), 0, $this->number);
} /**
* 创建画布
*
* @return void
*/
protected function createImage()
{
$this->image = imagecreatetruecolor($this->width, $this->height);
} /**
* 填充背景颜色
*
* @return void
*/
protected function fillBack()
{
imagefill($this->image, 0, 0, $this->lightColor());
} /**
* 随机生成浅颜色
*
* @return void
*/
protected function lightColor()
{
return imagecolorallocate($this->image, mt_rand(130, 255), mt_rand(130, 255), mt_rand(130, 255));
} /**
* 随机生成深颜色
*
* @return void
*/
protected function darkColor()
{
return imagecolorallocate($this->image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
} /**
* 将验证码字符串画到画布中
*
* @return void
*/
protected function drawChar()
{
$width = ceil($this->width / $this->number);
for ($i = 0; $i < $this->number; $i++) {
$x = mt_rand($i * $width+5, ($i + 1) * $width - 10);
$y = mt_rand(0, $this->height - 15);
imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());
}
} /**
* 添加干扰项
*
* @return void
*/
protected function drawDisturb()
{
for ($i = 0; $i < 150; $i++) {
$x = mt_rand(0, $this->width);
$y = mt_rand(0, $this->height);
imagesetpixel($this->image, $x, $y, $this->lightColor());
}
} /**
* 输出并且显示
*
* @return void
*/
protected function show()
{
header('Content-Type:image/png');
imagepng($this->image);
} public function outImage()
{
//创建画布
$this->createImage();
//填充背景色
$this->fillBack();
//将验证码字符串画到画布中
$this->drawChar();
//添加干扰项
$this->drawDisturb();
//输出并且显示
$this->show();
}
}
运行效果:

PHP学习之验证码类的更多相关文章
- THINKPHP源码学习--------验证码类
TP3.2验证码类的理解 今天在学习中用到了THINKPHP验证码,为了了解究竟,就开始阅读TP验证码的源码. 源码位置:./ThinkPHP/Library/Think/Verify.class.p ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- 【个人使用.Net类库】(4)验证码类
验证码是现在管理系统常用的一种保护用户帐户信息的一种功能. 验证码可以有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,虽然这可能是我们登录麻烦一点,但是对用户的密码安全来 ...
- 简单实用的PHP验证码类
一个简单实用的php验证码类,分享出来 ,供大家参考. 代码如下: <?php /** @ php 验证码类 @ http://www.jbxue.com */ Class code { var ...
- ThinkPHP 3.2.3 加减乘法验证码类
ThinkPHP 3.2.3 自带的验证码类位于 /ThinkPHP/Library/Think/Verify.class.php,字体文件位于 /ThinkPHP/Library/Think/Ver ...
- Yaf零基础学习总结5-Yaf类的自动加载
Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...
- 一个漂亮的php验证码类(分享)
直接上代码: 复制代码 代码如下: //验证码类class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRS ...
- PHP编写的图片验证码类文件分享方法
适用于自定义的验证码类! <?php/* * To change this license header, choose License Headers in Project Propertie ...
- PHP之验证码类
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/6/20 * Time: 14:29 */ Class c ...
随机推荐
- django inclusion用法
概述: inclusion主要的是生成html标签, 返回的是一个字典,大分部跟simple_tag类似, simple_tag可返回任意类型的值 定义inclusion from django im ...
- django form 和modelform样式设置
目录 1.form通过attr设置属性 2.输入框设置表单状态 3.modelform的使用 4.结合modelform 使用for循环生成输入框 5.基于init构造方法设置样式 6.基本增删改 ...
- # 机器学习算法总结-第六天(Adaboost算法)
SKlearn中的Adaboost使用 主要调的参数:第一部分是对我们的Adaboost的框架进行调参, 第二部分是对我们选择的弱分类器进行调参. 使用 Adaboost 进行手写数字识别 导入库,载 ...
- [shell] shell echo打印换行的方法
echo要支持同C语言一样的\转义功能,只需要加上参数-e,如下所示: echo -e hello \n echo \n
- 车型识别API调用与批量分类车辆图片
版权声明:本文为博主原创文章,转载 请注明出处 https://blog.csdn.net/sc2079/article/details/82189824 9月9日更:博客资源下载:链接: https ...
- iview 如何在表格中给操作图标添加Tooltip文字提示?
项目需要用到的iview 表格中操作项目有各种各样的图标,而各种各样的图标代表不同的操作,面对新用户可能很懵,那如何给这些图标添加Tooltip文字提示? 废话不多讲,直接看代码: <templ ...
- OEL7.2下Oracle11.2.0.4RAC部署
OEL7.2下Oracle11.2.0.4RAC部署 一. 安装步骤简述 u OEL7.2操作系统安装 u RAC 安装环境配置 u ORACLE CRS安装 u ORACLE DB软件安装 u OR ...
- 传统Spring配置JTA 实现多数据源事务的统一管理
分布式事务是指事务的参与者.支持事务的服务器.资源管理器以及事务管理器分别位于分布系统的不同节点之上,在两个或多个网络计算机资源上访问并且更新数据,将两个或多个网络计算机的数据进行的多次操作作为一个整 ...
- yarn是什么?
yarn是个包管理器.你可以通过它使用全世界开发者的代码, 或者分享自己的代码. 从 npm 安装软件包并保持相同的包管理流程. 优点: 1.速度超快. Yarn 缓存了每个下载过的包 ...
- HGOI 20191108 题解
Problem A 新婚快乐 一条路,被$n$个红绿灯划分成$n+1$段,从前到后一次给出每一段的长度$l_i$,每走$1$的长度需要$1$分钟. 一开始所有红绿灯都是绿色的,$g$分钟后所有红绿灯变 ...