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简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
smarty半小时快速上手入门教程
Oct 27 PHP
Ubuntu12下编译安装PHP5.3开发环境
Mar 27 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 PHP
PHP缩略图生成和图片水印制作
Jan 07 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新手上路(六)
2006/10/09 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
简单的代码实现jquery定时器
2014/01/03 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
node.js中的require使用详解
2014/12/15 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
基于js中的原型(全面讲解)
2017/09/19 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
python+mysql实现简单的web程序
2014/09/11 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
python多线程同步实例教程
2019/08/11 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
人事部经理岗位职责
2014/03/07 职场文书
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
学校运动会感想
2015/08/10 职场文书
2015团员个人年度总结
2015/11/24 职场文书