<?php
class
GeneratePassword{
private
$_rule
=
array
(
'letter' => 1,
'number' => 1,
'special' => 1
);
private
$_length
= 8;
private
$_num
= 1;
private
$_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))){
$t_rule
['letter'] =
$rule
['letter'];
}
if
(isset(
$rule
['number']) && in_array(
$rule
['number'],
array
(1,2))){
$t_rule
['number'] =
$rule
['number'];
}
if
(isset(
$rule
['special']) && in_array(
$rule
['special'],
array
(1,2))){
$t_rule
['special'] =
$rule
['special'];
}
if
(
$t_rule
){
$this
->_rule =
$t_rule
;
}
}
}
public
function
batchGenerate(){
$passwords
=
array
();
for
(
$i
=0;
$i
<
$this
->_num;
$i
++){
array_push
(
$passwords
,
$this
->generate());
}
return
$passwords
;
}
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
;
}
}
?>