php密码生成类实例

这篇文章主要介绍了php密码生成类,可实现根据要求生成多种格式密码的功能,是一款非常实用的PHP类文件,需要的朋友可以参考下

本文实例讲述了php实现的密码生成类及其应用方法,分享给大家供大家参考。具体分析如下:

一、php密码生成类功能:

1.可设定密码长度。

2.可设定要生成的密码个数,批量生成。

3.可以指定密码的规则,字母,数字,特殊字符等。

二、用法:

GeneratePassword.class.php类文件如下:

  1. <?php
  2. /** Generate Password class,根据指定规则生成password
  3. * Date: 2013-12-23
  4. * Author: fdipzone
  5. * Ver: 1.0
  6. *
  7. * Func:
  8. * public batchGenerate 批量生成密码
  9. * private generate 生成单个密码
  10. * private getLetter 获取字母
  11. * private getNumber 获取数字
  12. * private getSpecial 获取特殊字符
  13. */
  14. class GeneratePassword{ // class start
  15. // 密码的规则 default
  16. private $_rule = array(
  17. 'letter' => 1,
  18. 'number' => 1,
  19. 'special' => 1
  20. );
  21. private $_length = 8; // 密码长度
  22. private $_num = 1; // 密码数量
  23. private $_special = '!@#$%^&*()_+=-'; //允许的特殊字符
  24. /** 初始化
  25. * @param int $length 密码长度
  26. * @param int $num 密码数量
  27. * @param Array $rule 密码规则
  28. * @param String $special 允许的特殊字符
  29. */
  30. public function __construct($length=8, $num=1, $rule=array(), $special=''){
  31. if(isset($length) && is_numeric($length) && $length>=4 && $length<=50){ // 长度
  32. $this->_length = $length;
  33. }
  34. if(isset($num) && is_numeric($num) && $num>0 && $num<=100){ // 数量
  35. $this->_num = $num;
  36. }
  37. if(isset($special) && is_string($special) && $special!=''){ // 特殊字符
  38. $this->_special = $special;
  39. }
  40. if($rule){ // 规则
  41. $t_rule = array();
  42. if(isset($rule['letter']) && in_array($rule['letter'], array(1,2,3,4,5))){ // 1:可选用 2:必须 3:必须小写 4:必须大写 5:大小写都必须
  43. $t_rule['letter'] = $rule['letter'];
  44. }
  45. if(isset($rule['number']) && in_array($rule['number'], array(1,2))){ // 1:可选用 2:必须
  46. $t_rule['number'] = $rule['number'];
  47. }
  48. if(isset($rule['special']) && in_array($rule['special'], array(1,2))){ // 1:可选用 2:必须
  49. $t_rule['special'] = $rule['special'];
  50. }
  51. if($t_rule){
  52. $this->_rule = $t_rule;
  53. }
  54. }
  55. }
  56. /** 批量生成密码
  57. * @return Array
  58. */
  59. public function batchGenerate(){
  60. $passwords = array();
  61. for($i=0; $i<$this->_num; $i++){
  62. array_push($passwords, $this->generate());
  63. }
  64. return $passwords;
  65. }
  66. /** 生成单个密码
  67. * @return String
  68. */
  69. private function generate(){
  70. $password = '';
  71. $pool = '';
  72. $force_pool = '';
  73. if(isset($this->_rule['letter'])){
  74. $letter = $this->getLetter();
  75. switch($this->_rule['letter']){
  76. case 2:
  77. $force_pool .= substr($letter, mt_rand(0,strlen($letter)-1), 1);
  78. break;
  79. case 3:
  80. $force_pool .= strtolower(substr($letter, mt_rand(0,strlen($letter)-1), 1));
  81. $letter = strtolower($letter);
  82. break;
  83. case 4:
  84. $force_pool .= strtoupper(substr($letter, mt_rand(0,strlen($letter)-1), 1));
  85. $letter = strtoupper($letter);
  86. break;
  87. case 5:
  88. $force_pool .= strtolower(substr($letter, mt_rand(0,strlen($letter)-1), 1));
  89. $force_pool .= strtoupper(substr($letter, mt_rand(0,strlen($letter)-1), 1));
  90. break;
  91. }
  92. $pool .= $letter;
  93. }
  94. if(isset($this->_rule['number'])){
  95. $number = $this->getNumber();
  96. switch($this->_rule['number']){
  97. case 2:
  98. $force_pool .= substr($number, mt_rand(0,strlen($number)-1), 1);
  99. break;
  100. }
  101. $pool .= $number;
  102. }
  103. if(isset($this->_rule['special'])){
  104. $special = $this->getSpecial();
  105. switch($this->_rule['special']){
  106. case 2:
  107. $force_pool .= substr($special, mt_rand(0,strlen($special)-1), 1);
  108. break;
  109. }
  110. $pool .= $special;
  111. }
  112. $pool = str_shuffle($pool); // 随机打乱
  113. $password = str_shuffle($force_pool. substr($pool, 0, $this->_length-strlen($force_pool))); // 再次随机打乱
  114. return $password;
  115. }
  116. /** 字母 */
  117. private function getLetter(){
  118. $letter = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';
  119. return $letter;
  120. }
  121. /** 数字 */
  122. private function getNumber(){
  123. $number = '1234567890';
  124. return $number;
  125. }
  126. /** 特殊字符 */
  127. private function getSpecial(){
  128. $special = $this->_special;
  129. return $special;
  130. }
  131. } // class end
  132. ?>

demo示例程序如下:

  1. <?php
  2. require 'GeneratePassword.class.php';
  3. $rule = array(
  4. 'letter' => 5, // 必须含有大小写字母
  5. 'number' => 2, // 必须含有数字
  6. 'special' => 2 // 必须含有特殊字符
  7. );
  8. $special = '!@#$%_-';
  9. $obj = new GeneratePassword(8, 10, $rule, $special);
  10. $passwords = $obj->batchGenerate();
  11. echo implode('<br>', $passwords);
  12. ?>