当前位置:首页 > PHP教程 > php类库 > 列表

php密码生成类实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-14 15:26:54 浏览: 评论:0 

这篇文章主要介绍了php密码生成类,可实现根据要求生成多种格式密码的功能,是一款非常实用的PHP类文件,需要的朋友可以参考下

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

一、php密码生成类功能:

1.可设定密码长度。

2.可设定要生成的密码个数,批量生成。

3.可以指定密码的规则,字母,数字,特殊字符等。

二、用法:

GeneratePassword.class.php类文件如下:

  1. <?php  
  2. /** Generate Password class,根据指定规则生成password  
  3. *  Date:  2013-12-23  
  4. *  Author: fdipzone  
  5. *  Ver:  1.0  
  6.  
  7. *  Func:  
  8. *  public batchGenerate 批量生成密码  
  9. *  private generate   生成单个密码  
  10. *  private getLetter   获取字母   
  11. *  private getNumber   获取数字  
  12. *  private getSpecial  获取特殊字符  
  13. */ 
  14.    
  15. class GeneratePassword{ // class start  
  16.    
  17.   // 密码的规则 default  
  18.   private $_rule = array(  
  19.    'letter' => 1,  
  20.    'number' => 1,  
  21.    'special' => 1  
  22.   ); 
  23.    
  24.   private $_length = 8;         // 密码长度  
  25.   private $_num = 1;          // 密码数量  
  26.   private $_special = '!@#$%^&*()_+=-'//允许的特殊字符  
  27.    
  28.   /** 初始化  
  29.   * @param int  $length 密码长度  
  30.   * @param int  $num   密码数量  
  31.   * @param Array $rule  密码规则  
  32.   * @param String $special 允许的特殊字符  
  33.   */ 
  34.   public function __construct($length=8, $num=1, $rule=array(), $special=''){  
  35.    
  36.     if(isset($length) && is_numeric($length) && $length>=4 && $length<=50){ // 长度  
  37.       $this->_length = $length;  
  38.     }  
  39.    
  40.     if(isset($num) && is_numeric($num) && $num>0 && $num<=100){ // 数量  
  41.       $this->_num = $num;  
  42.     }  
  43.    
  44.     if(isset($special) && is_string($special) && $special!=''){ // 特殊字符  
  45.       $this->_special = $special;  
  46.     }  
  47.    
  48.     if($rule){ // 规则  
  49.    
  50.       $t_rule = array();  
  51.    
  52.       if(isset($rule['letter']) && in_array($rule['letter'], array(1,2,3,4,5))){ // 1:可选用 2:必须 3:必须小写 4:必须大写 5:大小写都必须  
  53.         $t_rule['letter'] = $rule['letter'];  
  54.       }  
  55.    
  56.       if(isset($rule['number']) && in_array($rule['number'], array(1,2))){ // 1:可选用 2:必须  
  57.         $t_rule['number'] = $rule['number'];  
  58.       }  
  59.    
  60.       if(isset($rule['special']) && in_array($rule['special'], array(1,2))){ // 1:可选用 2:必须  
  61.         $t_rule['special'] = $rule['special'];  
  62.       }  
  63.    
  64.       if($t_rule){  
  65.         $this->_rule = $t_rule;  
  66.       }  
  67.     }  
  68.   }  
  69.    
  70.   /** 批量生成密码  
  71.   * @return Array  
  72.   */ 
  73.   public function batchGenerate(){  
  74.     $passwords = array();  
  75.     for($i=0; $i<$this->_num; $i++){  
  76.       array_push($passwords$this->generate());  
  77.     }  
  78.     return $passwords;  
  79.   }  
  80.    
  81.   /** 生成单个密码  
  82.   * @return String  
  83.   */ 
  84.   private function generate(){  
  85.    
  86.     $password = '';  
  87.     $pool = '';  
  88.     $force_pool = '';  
  89.    
  90.     if(isset($this->_rule['letter'])){  
  91.    
  92.       $letter = $this->getLetter();  
  93.    
  94.       switch($this->_rule['letter']){  
  95.         case 2:  
  96.           $force_pool .= substr($letter, mt_rand(0,strlen($letter)-1), 1);  
  97.           break;  
  98.    
  99.         case 3:  
  100.           $force_pool .= strtolower(substr($letter, mt_rand(0,strlen($letter)-1), 1));  
  101.           $letter = strtolower($letter);  
  102.           break;  
  103.    
  104.         case 4:  
  105.           $force_pool .= strtoupper(substr($letter, mt_rand(0,strlen($letter)-1), 1));  
  106.           $letter = strtoupper($letter);  
  107.           break;  
  108.    
  109.         case 5:  
  110.           $force_pool .= strtolower(substr($letter, mt_rand(0,strlen($letter)-1), 1));  
  111.           $force_pool .= strtoupper(substr($letter, mt_rand(0,strlen($letter)-1), 1));  
  112.           break;  
  113.       }  
  114.    
  115.       $pool .= $letter;  
  116.     }  
  117.     if(isset($this->_rule['number'])){  
  118.    
  119.       $number = $this->getNumber();  
  120.    
  121.       switch($this->_rule['number']){  
  122.         case 2:  
  123.           $force_pool .= substr($number, mt_rand(0,strlen($number)-1), 1);  
  124.           break;  
  125.       }  
  126.    
  127.       $pool .= $number;  
  128.     }  
  129.    
  130.     if(isset($this->_rule['special'])){  
  131.    
  132.       $special = $this->getSpecial();  
  133.    
  134.       switch($this->_rule['special']){  
  135.         case 2:  
  136.           $force_pool .= substr($special, mt_rand(0,strlen($special)-1), 1);  
  137.           break;  
  138.       }  
  139.       $pool .= $special;  
  140.     }  
  141.    
  142.     $pool = str_shuffle($pool); // 随机打乱  
  143.    
  144.     $password = str_shuffle($force_poolsubstr($pool, 0, $this->_length-strlen($force_pool))); // 再次随机打乱  
  145.    
  146.     return $password;  
  147.   }  
  148.    
  149.   /** 字母 */ 
  150.   private function getLetter(){  
  151.     $letter = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';  
  152.     return $letter;  
  153.   }  
  154.    
  155.   /** 数字 */ 
  156.   private function getNumber(){  
  157.     $number = '1234567890';  
  158.     return $number;  
  159.   }  
  160.    
  161.   /** 特殊字符 */ 
  162.   private function getSpecial(){  
  163.     $special = $this->_special;  
  164.     return $special;  
  165.   }  
  166. // class end  
  167.    
  168. ?>  

demo示例程序如下:

  1. <?php  
  2. require 'GeneratePassword.class.php';  
  3.    
  4. $rule = array(  
  5.   'letter' => 5, // 必须含有大小写字母  
  6.   'number' => 2, // 必须含有数字  
  7.   'special' => 2 // 必须含有特殊字符  
  8. );  
  9.    
  10. $special = '!@#$%_-';  
  11.    
  12. $obj = new GeneratePassword(8, 10, $rule$special);  
  13. $passwords = $obj->batchGenerate();  
  14.    
  15. echo implode('<br>'$passwords);  
  16. ?> 

Tags: php密码生成类

分享到: