Maison > développement back-end > tutoriel php > classe de génération de mot de passe php

classe de génération de mot de passe php

黄舟
Libérer: 2023-03-05 19:38:02
original
1406 Les gens l'ont consulté

Classe de génération de mot de passe php

Fonction :

1. La longueur du mot de passe peut être définie.

2. Vous pouvez définir le nombre de mots de passe à générer et les générer par lots.

3. Vous pouvez spécifier des règles de mot de passe, des lettres, des chiffres, des caractères spéciaux, etc.


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(
                            &#39;letter&#39; => 1,
                            &#39;number&#39; => 1,
                            &#39;special&#39; => 1
                       );

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


    /** 初始化
    * @param int    $length  密码长度
    * @param int    $num     密码数量
    * @param Array  $rule    密码规则
    * @param String $special 允许的特殊字符
    */
    public function __construct($length=8, $num=1, $rule=array(), $special=&#39;&#39;){

        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!=&#39;&#39;){ // 特殊字符
            $this->_special = $special;
        }

        if($rule){ // 规则

            $t_rule = array();

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

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

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

            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 = &#39;&#39;;
        $pool = &#39;&#39;;
        $force_pool = &#39;&#39;;

        if(isset($this->_rule[&#39;letter&#39;])){

            $letter = $this->getLetter();

            switch($this->_rule[&#39;letter&#39;]){
                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[&#39;number&#39;])){

            $number = $this->getNumber();

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

            $pool .= $number;

        }

        if(isset($this->_rule[&#39;special&#39;])){

            $special = $this->getSpecial();

            switch($this->_rule[&#39;special&#39;]){
                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 = &#39;AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz&#39;;
        return $letter;
    }


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


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

} // class end

?>
Copier après la connexion


démo :


<?php
require &#39;GeneratePassword.class.php&#39;;

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

$special = &#39;!@#$%_-&#39;;

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

echo implode(&#39;<br>&#39;, $passwords);
?>
Copier après la connexion


Ce qui précède est le contenu de la génération de mot de passe PHP. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal