zoukankan      html  css  js  c++  java
  • 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);
    ?>

    源码下载地址:点击查看


  • 相关阅读:
    Collections和Arrays常用方法
    集合(三)------双列集合
    集合(二)------单列集合
    集合(一)----------概述
    泛型
    线程
    Math类和Random类(数学公式相关类)
    时间相关的类
    Runtime类及其常用方法
    第65题:有效数字
  • 原文地址:https://www.cnblogs.com/fdipzone/p/3715069.html
Copyright © 2011-2022 走看看