php密码生成类 - 面向对象网 php 学习 对象 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > OOP语言 > PHP > 正文

php密码生成类

来源: www.bianceng.cn 阅读:

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 
	查看本栏目更多精彩内容:http://www.bianceng.cn/webkf/PHP/
    */
    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);  
?>

源码下载地址:http://download.csdn.net/detail/fdipzone/6760311

作者:csdn博客 傲雪星枫

Tags:
相关文章列表: