Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in den PHP-Kurs zur Passwortgenerierung

Einführung in den PHP-Kurs zur Passwortgenerierung

jacklove
jackloveOriginal
2018-06-09 14:34:331263Durchsuche

php-Passwortgenerierungsklasse

Funktion:

1. Die Passwortlänge kann eingestellt werden.

2. Sie können die Anzahl der zu generierenden Passwörter festlegen und diese stapelweise generieren.

3. Sie können Passwortregeln, Buchstaben, Zahlen, Sonderzeichen usw. festlegen.

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
?>

Demo:

<?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);
?>

In diesem Artikel wird die PHP-Passwortgenerierungsklasse vorgestellt. Weitere Informationen finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

So verwenden Sie die asynchrone PHP-Aufrufmethode

So lassen Sie PHP automatisch Miniaturansichten basierend auf generieren URL und Umgang mit Problemen mit hoher Parallelität

Vergleich zwischen PHP-String-Komprimierungsmethoden

Das obige ist der detaillierte Inhalt vonEinführung in den PHP-Kurs zur Passwortgenerierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn