加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php密码生成类实例

发布时间:2020-12-12 20:24:13 所属栏目:PHP教程 来源:网络整理
导读:本篇章节讲解php实现的密码生成类及其应用方法,供大家参考研究。具体分析如下: 一、php密码生成类功能: 1.可设定密码长度。2.可设定要生成的密码个数,批量生成。3.可以指定密码的规则,字母,数字,特殊字符等。 二、用法: GeneratePassword.cl

本篇章节讲解php实现的密码生成类及其应用方法,分享给大家供大家参考。具体分析如下:

一、php密码生成类功能:

1.可设定密码长度。 2.可设定要生成的密码个数,批量生成。 3.可以指定密码的规则,字母,数字,特殊字符等。

二、用法:

GeneratePassword.class.php类文件如下:

class GeneratePassword{ // class start

// 密码的规则 default
private $_rule = array(
'letter' => 1,'number' => 1,'special' => 1
);

private $_length = 8; // 密码长度
private $_num = 1; // 密码数量
private $special = '!@#$%^&*()+=-'; //允许的特殊字符

/** 初始化

  • @param int $length 密码长度

  • @param int $num 密码数量

  • @param Array $rule 密码规则

  • @param String $special 允许的特殊字符
    */
    public function __construct($length=8,$num=1,$rule=array(),$special=''){

    if(isset($length) && is_numeric($length) && $length>=4 && $length<=50){ // 长度
    $this->_length = $length;
    }

    if(isset($num) && is_numeric($num) && $num>0 && $num<=100){ // 数量
    $this->_num = $num;
    }

    if(isset($special) && is_string($special) && $special!=''){ // 特殊字符
    $this->_special = $special;
    }

    if($rule){ // 规则

    $t_rule = array();

    if(isset($rule['letter']) && in_array($rule['letter'],array(1,2,3,4,5))){ // 1:可选用 2:必须 3:必须小写 4:必须大写 5:大小写都必须
    $t_rule['letter'] = $rule['letter'];
    }

    if(isset($rule['number']) && in_array($rule['number'],2))){ // 1:可选用 2:必须
    $t_rule['number'] = $rule['number'];
    }

    if(isset($rule['special']) && in_array($rule['special'],2))){ // 1:可选用 2:必须
    $t_rule['special'] = $rule['special'];
    }

    if($t_rule){
    $this->_rule = $t_rule;
    }
    }
    }

/** 批量生成密码

  • @return Array
    */
    public function batchGenerate(){
    $passwords = array();
    for($i=0; $i<$this->_num; $i++){
    array_push($passwords,$this->generate());
    }
    return $passwords;
    }

/** 生成单个密码

  • @return String
    */
    private function generate(){

    $password = '';
    $pool = '';
    $force_pool = '';

    if(isset($this->_rule['letter'])){

    $letter = $this->getLetter();

    switch($this->_rule['letter']){
    case 2:
    $force_pool .= substr($letter,mt_rand(0,strlen($letter)-1),1);
    break;

    case 3: 
      $force_pool .= strtolower(substr($letter,1)); 
      $letter = strtolower($letter); 
      break; 
    
    case 4: 
      $force_pool .= strtoupper(substr($letter,1)); 
      $letter = strtoupper($letter); 
      break; 
    
    case 5: 
      $force_pool .= strtolower(substr($letter,1)); 
      $force_pool .= strtoupper(substr($letter,1)); 
      break; 

    }

    $pool .= $letter;
    }
    if(isset($this->_rule['number'])){

    $number = $this->getNumber();

    switch($this->_rule['number']){
    case 2:
    $force_pool .= substr($number,strlen($number)-1),1);
    break;
    }

    $pool .= $number;
    }

    if(isset($this->_rule['special'])){

    $special = $this->getSpecial();

    switch($this->_rule['special']){
    case 2:
    $force_pool .= substr($special,strlen($special)-1),1);
    break;
    }
    $pool .= $special;
    }

    $pool = str_shuffle($pool); // 随机打乱

    $password = str_shuffle($force_pool. substr($pool,$this->_length-strlen($force_pool))); // 再次随机打乱

    return $password;
    }

/* 字母 /
private function getLetter(){
$letter = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';
return $letter;
}

/* 数字 /
private function getNumber(){
$number = '1234567890';
return $number;
}

/* 特殊字符 /
private function getSpecial(){
$special = $this->_special;
return $special;
}
} // class end

?>

demo示例程序如下:

$rule = array(
'letter' => 5,// 必须含有大小写字母
'number' => 2,// 必须含有数字
'special' => 2 // 必须含有特殊字符
);

$special = '!@#$%_-';

$obj = new GeneratePassword(8,10,$rule,$special);
$passwords = $obj->batchGenerate();

echo implode('
',$passwords);
?>

本文完整源码可点击此处。

相信本文所述对大家的C#程序设计有一定的借鉴价值。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读