<?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学习之验证码类的更多相关文章

  1. THINKPHP源码学习--------验证码类

    TP3.2验证码类的理解 今天在学习中用到了THINKPHP验证码,为了了解究竟,就开始阅读TP验证码的源码. 源码位置:./ThinkPHP/Library/Think/Verify.class.p ...

  2. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  3. 【个人使用.Net类库】(4)验证码类

    验证码是现在管理系统常用的一种保护用户帐户信息的一种功能. 验证码可以有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,虽然这可能是我们登录麻烦一点,但是对用户的密码安全来 ...

  4. 简单实用的PHP验证码类

    一个简单实用的php验证码类,分享出来 ,供大家参考. 代码如下: <?php /** @ php 验证码类 @ http://www.jbxue.com */ Class code { var ...

  5. ThinkPHP 3.2.3 加减乘法验证码类

    ThinkPHP 3.2.3 自带的验证码类位于 /ThinkPHP/Library/Think/Verify.class.php,字体文件位于 /ThinkPHP/Library/Think/Ver ...

  6. Yaf零基础学习总结5-Yaf类的自动加载

    Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...

  7. 一个漂亮的php验证码类(分享)

    直接上代码: 复制代码 代码如下: //验证码类class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRS ...

  8. PHP编写的图片验证码类文件分享方法

    适用于自定义的验证码类! <?php/* * To change this license header, choose License Headers in Project Propertie ...

  9. PHP之验证码类

    <?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/6/20 * Time: 14:29 */ Class c ...

随机推荐

  1. web开发中的Cookie与Session技术

    Cookie Cookie的由来 HTTP协议是无状态的,无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后 ...

  2. Ubuntu + Django(DRF) + channels(websocket)+NGINX + uwsgi 环境部署

    原来uwsgi并不能启动  asgi  呀!现在才知道,就因为这一点我花了一周时间才成功啊!!!!!!!! 是呀!你启动uwsgi 是将你的项目启动了,可是你也发现虽然启动了,但是你的websocke ...

  3. iOS13新坑(转自Cocoachina)

    1.用presentViewController而非navigator,但在iOS13里默认是可下拉折叠的对话框,这样带来一个界面排版的高度并不是屏幕高度,从而影响界面效果.可以将viewcontro ...

  4. 7.SpringMVC 配置式开发-ModelAndView和视图解析器

    ModelAndView 1.Model(模型) 1.model的本质就是HashMap,向模型中添加数据,就是往HashMap中去添加数据 2.HashMap 是一个单向查找数组,单向链表数组 3. ...

  5. 10.自定义EL函数和自定义标签

    需要在JSP页面中进行一些常见逻辑操作(如对字符串进行操作),首先考虑是否可以用到sun公司提供的EL函数库(fn.tld)和JSTL 核心标签库 如果sun公司的EL函数库没有或者无法满足,就需要自 ...

  6. PhpStorm添加PHP代码规范检查CodeSniffer(phpcs)和PHP代码静态分析工具Mess Detector(phpmd)

    一.安装 添加镜像,加速下载 ./composer.phar  config -g repo.packagist composer https://packagist.phpcomposer.com ...

  7. Delphi 重载方法与重定义方法

  8. 正则表达式 re模块的使用

    一 正则表达式 首先, 我们在网页上进行行注册或者登陆的时候经常能看到一些格式上的错误提示. 比如:你在注册百度账号的时候  https://passport.baidu.com/v2/?reg&am ...

  9. okhttp缓存策略源码分析:put&get方法

    对于OkHttp的缓存策略其实就是在下一次请求的时候能节省更加的时间,从而可以更快的展示出数据,那在Okhttp如何使用缓存呢?其实很简单,如下: 配置一个Cache既可,其中接收两个参数:一个是缓存 ...

  10. File "/usr/bin/pip", line 11, in <module> sys.exit(__main__._main()) AttributeError: 'module' object has no attribute '_main'

    多个版本pip共存导致 直接使用pip2进行安装即可 如:pip2 install requests