> 백엔드 개발 > PHP 튜토리얼 > PHP 비밀번호 생성 수업 소개

PHP 비밀번호 생성 수업 소개

jacklove
풀어 주다: 2023-03-31 10:08:01
원래의
1336명이 탐색했습니다.

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(
                            &#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);
?>
로그인 후 복사

이 글에서는 PHP 비밀번호 생성 클래스를 소개하고 있으니 PHP 중국어 홈페이지를 참고해주세요.

관련 권장 사항:

PHP 비동기 호출 방법을 사용하는 방법

PHP가 URL을 기반으로 자동으로 썸네일을 생성하고 높은 동시성 문제를 처리하도록 하는 방법

PHP 문자열 압축 방법 간의 비교 정보

위 내용은 PHP 비밀번호 생성 수업 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿