php密码生成类实例

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

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

一、php密码生成类功能:

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

二、用法:

GeneratePassword.class.php类文件如下:


    <?php 
    /** Generate Password class,根据指定规则生成password 
    *  Date:  2013-12-23 
    *  Author: fdipzone 
    *  Ver:  1.0 
    * 
    *  Func: 
    *  public batchGenerate 批量生成密码 
    *  private generate   生成单个密码 
    *  private getLetter   获取字母  
    *  private getNumber   获取数字 
    *  private getSpecial  获取特殊字符 
    */ 

    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'], array(1,2))){ // 1:可选用 2:必须 
            $t_rule['number'] = $rule['number']; 
          } 

          if(isset($rule['special']) && in_array($rule['special'], array(1,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, mt_rand(0,strlen($letter)-1), 1)); 
              $letter = strtolower($letter); 
              break; 

            case 4: 
              $force_pool .= strtoupper(substr($letter, mt_rand(0,strlen($letter)-1), 1)); 
              $letter = strtoupper($letter); 
              break; 

            case 5: 
              $force_pool .= strtolower(substr($letter, mt_rand(0,strlen($letter)-1), 1)); 
              $force_pool .= strtoupper(substr($letter, mt_rand(0,strlen($letter)-1), 1)); 
              break; 
          } 

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

          $number = $this->getNumber(); 

          switch($this->_rule['number']){ 
            case 2: 
              $force_pool .= substr($number, mt_rand(0,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, mt_rand(0,strlen($special)-1), 1); 
              break; 
          } 
          $pool .= $special; 
        } 

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

        $password = str_shuffle($force_pool. substr($pool, 0, $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示例程序如下:


    <?php 
    require 'GeneratePassword.class.php'; 

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

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

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

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

本文完整源码可点击此处本站下载

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

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8