PHP生成随机密码类分享


Posted in PHP onJune 25, 2014

类代码:

<?php
/**
 * PHP - Password Generator Class
 * Version 1.0.0
 *
 */
 
if (@!is_object($passGen) || !isset($passGen)) {
  $passGen = new Password;
}
 
class Password
{
 
  /**
   * 大写字母 A-Z
   *
   * @var array
   */
  protected $uppercase_chars;
 
  /**
   * 小写字母 a-z
   *
   * @var array
   */
  protected $lowercase_chars;
 
  /**
   * 阿拉伯数字 0-9
   *
   * @var array
   */
  protected $number_chars;
 
  /**
   * 特殊字符
   *
   * @var array
   */
  protected $special_chars;
 
  /**
   * 其他特殊字符
   *
   * @var array
   */
  protected $extra_chars;
 
  /**
   * 最终用来生成密码的所有字符
   *
   * @var array
   */
  protected $chars = array();
 
  /**
   * 密码长度
   *
   * @var array
   */
  public $length;
 
  /**
   * 是否使用大写字母
   *
   * @var boolean
   */
  public $uppercase;
 
  /**
   * 是否使用小写字母
   *
   * @var boolean
   */
  public $lowercase;
 
  /**
   * 是否使用阿拉伯数字
   *
   * @var boolean
   */
  public $number;
 
  /**
   * 是否使用特殊字符
   *
   * @var boolean
   */
  public $special;
 
  /**
   * 是否使用额外的特殊字符
   *
   * @var boolean
   */
  public $extra;
 
  /**
   * 初始化密码设置
   *
   * @param int $length
   */
  function Password($length = 12)
  {
    $this->length = $length;
     
    $this->configure(true, true, true, false, false);
  }
 
  /**
   * 配置
   */
  function configure($uppercase = false, $lowercase = false, $number = false,
            $special = false, $extra = false
  ) {
    $this->chars = array();
 
    $this->upper_chars  = array(
                 "A", "B", "C", "D", "E", "F", "G", "H", "I",
                 "J", "K", "L", "M", "N", "O", "P", "Q", "R",
                 "S", "T", "U", "V", "W", "X", "Y", "Z"
                );
    $this->lower_chars  = array(
                 "a", "b", "c", "d", "e", "f", "g", "h", "i",
                 "j", "k", "l", "m", "n", "o", "p", "q", "r", 
                 "s", "t", "u", "v", "w", "x", "y", "z"
                );
    $this->number_chars = array(
                 "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"
                );
    $this->special_chars = array(
                 "!", "@", "#", "$", "%", "^", "&", "*", "(", ")"
                );
    $this->extra_chars  = array(
                 "[", "]", "{", "}", "-", "_", "+", "=", "<",
                 ">", "?", "/", "`", "~", "|", ",", ".", ";", ":"
                );
 
    if (($this->uppercase = $uppercase) === true) {
      $this->chars = array_merge($this->chars, $this->upper_chars);
    }
    if (($this->lowercase = $lowercase) === true) {
      $this->chars = array_merge($this->chars, $this->lower_chars);
    }
    if (($this->number = $number) === true) {
      $this->chars = array_merge($this->chars, $this->number_chars);
    }
    if (($this->special = $special) === true) {
      $this->chars = array_merge($this->chars, $this->special_chars);
    }
    if (($this->extra = $extra) === true) {
      $this->chars = array_merge($this->chars, $this->extra_chars);
    }
 
    $this->chars = array_unique($this->chars);
  }
   
  /**
   * 从字符列中生成随机密码
   *
   * @return string
   **/
  function generate()
  {
    if (empty($this->chars)) {
      return false;
    }
 
    $hash    = '';
    $totalChars = count($this->chars) - 1;
     
    for ($i = 0; $i < $this->length; $i++) {
      $hash .= $this->chars[$this->random(0, $totalChars)];
    }
 
    return $hash;
  }
 
  /**
   * 生成随机数字
   *
   * @return int
   */
  function random($min = 0, $max = 0)
  {
    $max_random = 4294967295;
 
    $random = uniqid(microtime() . mt_rand(), true);
    $random = sha1(md5($random));
 
    $value = substr($random, 0, 8);
    $value = abs(hexdec($value));
 
    if ($max != 0) {
      $value = $min + ($max - $min + 1) * $value / ($max_random + 1);
    }
 
    return abs(intval($value));
  }
}

调用:

<?php
 
include_once 'password.class.php';
 
echo $passGen->generate();
 
//FS4yq74e2LeE
PHP 相关文章推荐
PHP树的代码,可以嵌套任意层
Oct 09 PHP
PHP MSSQL 存储过程的方法
Dec 24 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
Apr 20 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
Dec 08 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
php经典算法集锦
Nov 14 PHP
php制作的简单验证码识别代码
Jan 26 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 #PHP
JavaScript创建命名空间的5种写法
Jun 24 #PHP
PHP获取windows登录用户名的方法
Jun 24 #PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 #PHP
PHP判断表单复选框选中状态完整例子
Jun 24 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
Jun 24 #PHP
You might like
php不用正则采集速度探究总结
2008/03/24 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
javascript将数组插入到另一个数组中的代码
2013/01/10 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
python 6种方法实现单例模式
2020/12/15 Python
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
护士毕业生自我鉴定
2014/02/08 职场文书
百年孤独读书笔记
2015/06/29 职场文书