PHP生成随机密码类分享

5年以前  |  阅读数:821 次  |  编程语言:PHP 

类代码:


    <?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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例