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 ...
随机推荐
- NPOI 实现在已存在的Excel中任意位置开始插入任意数量行,并填充数据
1 npoi版本2.1.3.1 2 需要添加的引用: using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using System.IO;using N ...
- java引用传递,值传递
2个interger的引用对象传给一个swap方法在方法内部进行交换 1.1 java中方法参数传值方式 java中方法传参数都是值传递的,只不过根据参数的类型是引用类型还是非引用类型 引用类型传递的 ...
- 如何创建一个前端 React 组件并发布到 NPM
首先npm文档摆在这里: https://www.npmjs.cn/ 参考组件 https://github.com/rakuten-rex/rex-dropdownhttps://www.npmjs ...
- Hadoop_12_Hadoop 中的RPC框架演示
Hadoop中自己提供了一个RPC的框架.集群中各节点的通讯都使用了那个框架 1.服务端 1.1.业务接口:ClientNamenodeProtocol package cn.bigdata.hdfs ...
- 说一下 HashMap 的实现原理?(未完成)
说一下 HashMap 的实现原理?(未完成)
- eclipse安装Bug检查工具
第一步:下载spotbugs工具 打开eclipse>Help>Eclipse Matketplace 打开 Eclipse Marketplace 搜索 spotbugs,点击Insta ...
- java面试知识记录
1.数据库 (1)数据库优化 面试求职:数据库常见面试题(数据库优化思路) 数据库优化方案整理 (2)数据库的事务 MySQL——事务(Transaction)详解 MySQL 事务 2.设 ...
- 关于从入 OI 以来学的各种知识点的系统总结
前言 OI 之路差不多快结束了,最近水平也萎得很厉害,这里就开个目录,记录一些需要总结的知识点吧.不定期更,勿催,我还要改模拟赛的题. 目录
- php 常用正则运算
$regx = "/^[0-9]*$/"; var_dump(preg_match($regx, $phone)); 常用的正则运算: •验证数字:^[0-9]*$ •验证n位的数 ...
- Prim算法和Kruskal算法介绍
一.Prim算法 普利姆(Prim)算法适用于求解无向图中的最小生成树(Minimum Cost Spanning Tree).下面是Prim算法构造最小生成树的过程图解. ...