php密码生成类实例
这篇文章主要介绍了php密码生成类,可实现根据要求生成多种格式密码的功能,是一款非常实用的PHP类文件,需要的朋友可以参考下
本文实例讲述了php实现的密码生成类及其应用方法,分享给大家供大家参考。具体分析如下:
一、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(
- 'letter' => 1,
- 'number' => 1,
- 'special' => 1
- );
- private $_length = 8; // 密码长度
- private $_num = 1; // 密码数量
- private $_special = '!@#$%^&*()_+=-'; //允许的特殊字符
- /** 初始化
- * @param int $length 密码长度
- * @param int $num 密码数量
- * @param Array $rule 密码规则
- * @param String $special 允许的特殊字符
- */
- public function __construct($length=8, $num=1, $rule=array(), $special=''){
- 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!=''){ // 特殊字符
- $this->_special = $special;
- }
- if($rule){ // 规则
- $t_rule = array();
- if(isset($rule['letter']) && in_array($rule['letter'], array(1,2,3,4,5))){ // 1:可选用 2:必须 3:必须小写 4:必须大写 5:大小写都必须
- $t_rule['letter'] = $rule['letter'];
- }
- if(isset($rule['number']) && in_array($rule['number'], array(1,2))){ // 1:可选用 2:必须
- $t_rule['number'] = $rule['number'];
- }
- if(isset($rule['special']) && in_array($rule['special'], array(1,2))){ // 1:可选用 2:必须
- $t_rule['special'] = $rule['special'];
- }
- 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 = '';
- $pool = '';
- $force_pool = '';
- if(isset($this->_rule['letter'])){
- $letter = $this->getLetter();
- switch($this->_rule['letter']){
- 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['number'])){
- $number = $this->getNumber();
- switch($this->_rule['number']){
- case 2:
- $force_pool .= substr($number, mt_rand(0,strlen($number)-1), 1);
- break;
- }
- $pool .= $number;
- }
- if(isset($this->_rule['special'])){
- $special = $this->getSpecial();
- switch($this->_rule['special']){
- 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 = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';
- return $letter;
- }
- /** 数字 */
- private function getNumber(){
- $number = '1234567890';
- return $number;
- }
- /** 特殊字符 */
- private function getSpecial(){
- $special = $this->_special;
- return $special;
- }
- } // class end
- ?>
demo示例程序如下:
- <?php
- require 'GeneratePassword.class.php';
- $rule = array(
- 'letter' => 5, // 必须含有大小写字母
- 'number' => 2, // 必须含有数字
- 'special' => 2 // 必须含有特殊字符
- );
- $special = '!@#$%_-';
- $obj = new GeneratePassword(8, 10, $rule, $special);
- $passwords = $obj->batchGenerate();
- echo implode('<br>', $passwords);
- ?>