php密码生成类实例
本文实例讲述了php实现的密码生成类及其应用方法,分享给大家供大家参考。具体分析如下:
一、php密码生成类功能:
1.可设定密码长度。
2.可设定要生成的密码个数,批量生成。
3.可以指定密码的规则,字母,数字,特殊字符等。
二、用法:
GeneratePassword.class.php类文件如下:
<?php
/**GeneratePasswordclass,根据指定规则生成password
*Date:2013-12-23
*Author:fdipzone
*Ver:1.0
*
*Func:
*publicbatchGenerate批量生成密码
*privategenerate生成单个密码
*privategetLetter获取字母
*privategetNumber获取数字
*privategetSpecial获取特殊字符
*/
classGeneratePassword{//classstart
//密码的规则default
private$_rule=array(
'letter'=>1,
'number'=>1,
'special'=>1
);
private$_length=8;//密码长度
private$_num=1;//密码数量
private$_special='!@#$%^&*()_+=-';//允许的特殊字符
/**初始化
*@paramint$length密码长度
*@paramint$num密码数量
*@paramArray$rule密码规则
*@paramString$special允许的特殊字符
*/
publicfunction__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;
}
}
}
/**批量生成密码
*@returnArray
*/
publicfunctionbatchGenerate(){
$passwords=array();
for($i=0;$i<$this->_num;$i++){
array_push($passwords,$this->generate());
}
return$passwords;
}
/**生成单个密码
*@returnString
*/
privatefunctiongenerate(){
$password='';
$pool='';
$force_pool='';
if(isset($this->_rule['letter'])){
$letter=$this->getLetter();
switch($this->_rule['letter']){
case2:
$force_pool.=substr($letter,mt_rand(0,strlen($letter)-1),1);
break;
case3:
$force_pool.=strtolower(substr($letter,mt_rand(0,strlen($letter)-1),1));
$letter=strtolower($letter);
break;
case4:
$force_pool.=strtoupper(substr($letter,mt_rand(0,strlen($letter)-1),1));
$letter=strtoupper($letter);
break;
case5:
$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']){
case2:
$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']){
case2:
$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;
}
/**字母*/
privatefunctiongetLetter(){
$letter='AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';
return$letter;
}
/**数字*/
privatefunctiongetNumber(){
$number='1234567890';
return$number;
}
/**特殊字符*/
privatefunctiongetSpecial(){
$special=$this->_special;
return$special;
}
}//classend
?>
demo示例程序如下:
<?php
require'GeneratePassword.class.php';
$rule=array(
'letter'=>5,//必须含有大小写字母
'number'=>2,//必须含有数字
'special'=>2//必须含有特殊字符
);
$special='!@#$%_-';
$obj=newGeneratePassword(8,10,$rule,$special);
$passwords=$obj->batchGenerate();
echoimplode('<br>',$passwords);
?>
本文完整源码可点击此处本站下载。
相信本文所述对大家的C#程序设计有一定的借鉴价值。