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 10 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
Aug 07 PHP
php中socket通信机制实例详解
Jan 03 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
php排序算法实例分析
Oct 17 PHP
php实现推荐功能的简单实例
Sep 29 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 PHP
php实现快速对二维数组某一列进行组装的方法小结
Dec 04 PHP
PHP如何解决微信文章图片防盗链
Dec 09 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 Socket 编程
2010/04/09 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
Vue的Options用法说明
2020/08/14 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
python操作mysql数据库
2017/03/05 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
python爬虫使用cookie登录详解
2017/12/27 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Python扫描端口的实现
2021/01/25 Python
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
技校学生个人职业生涯规划范文
2014/03/03 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
借款民事起诉状范文
2015/05/19 职场文书
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
Java无向树分析 实现最小高度树
2022/04/09 Javascript