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 相关文章推荐
一道求$b相对于$a的相对路径的php代码
Aug 08 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
php自动加载机制的深入分析
Jun 08 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
php pdo oracle中文乱码的快速解决方法
May 16 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
PHP 接入微信扫码支付总结(总结篇)
Nov 03 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
Apr 09 PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 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
利用js调用后台php进行数据处理原码
2006/10/09 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
js表数据排序 sort table data
2009/02/18 Javascript
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
Python中使用SAX解析xml实例
2014/11/21 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
python3去掉string中的标点符号方法
2019/01/22 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
keras得到每层的系数方式
2020/06/15 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
请介绍一下Ant
2016/07/22 面试题
销售文员岗位职责
2013/11/29 职场文书
工地安全生产标语
2014/06/06 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
英雄儿女观后感
2015/06/09 职场文书
60句有关成长的名言
2019/09/04 职场文书
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
关于Python使用turtle库画任意图的问题
2022/04/01 Python