ホームページ > バックエンド開発 > PHPチュートリアル > PHPのパスワード生成クラス

PHPのパスワード生成クラス

黄舟
リリース: 2023-03-05 19:38:02
オリジナル
1562 人が閲覧しました

phpパスワード生成クラス

機能:

1. パスワードの長さを設定できます。

2. 生成するパスワードの数を設定し、バッチで生成できます。

3. パスワードのルール、文字、数字、特殊文字などを指定できます。


GeneratePassword.class.php


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

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

 

?>

ログイン後にコピー


デモ:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?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 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート