一个生成随机初始密码的PHP类

2015/05/1722:09:45一个生成随机初始密码的PHP类已关闭评论 943

一个使用方便的php类:生成随机初始密码的PHP类

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));
   }
}

使用方法:
将以上代码保存为文件password.class.php。

include_once("password.class.php");
echo $passGen->generate();
echo $passGen->random($min = 1, $max = 10000000);
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin