php 复杂密码生成,php密码生成类实例

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

一、php密码生成类功能:

1.可设定密码长度。

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

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

二、用法:

GeneratePassword.class.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_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示例程序如下:

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('
', $passwords);

?>

本文完整源码可点击此处本站下载。

相信本文所述对大家的C#程序设计有一定的借鉴价值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值