以下是我对选项列表的贡献。
该功能可以确保密码策略被满足。
function password_generate($length=8, $min_lowercases=1, $min_uppercases=1, $min_numbers=1, $min_specials=0) {
$lowercases = 'abcdefghijklmnopqrstuvwxyz';
$uppercases = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$numbers = '0123456789';
$specials = '!#%&/(){}[]+-';
$absolutes = '';
if ($min_lowercases && !is_bool($min_lowercases)) $absolutes .= substr(str_shuffle(str_repeat($lowercases, $min_lowercases)), 0, $min_lowercases);
if ($min_uppercases && !is_bool($min_uppercases)) $absolutes .= substr(str_shuffle(str_repeat($uppercases, $min_uppercases)), 0, $min_uppercases);
if ($min_numbers && !is_bool($min_numbers)) $absolutes .= substr(str_shuffle(str_repeat($numbers, $min_numbers)), 0, $min_numbers);
if ($min_specials && !is_bool($min_specials)) $absolutes .= substr(str_shuffle(str_repeat($specials, $min_specials)), 0, $min_specials);
$remaining = $length - strlen($absolutes);
$characters = '';
if ($min_lowercases !== false) $characters .= substr(str_shuffle(str_repeat($lowercases, $remaining)), 0, $remaining);
if ($min_uppercases !== false) $characters .= substr(str_shuffle(str_repeat($uppercases, $remaining)), 0, $remaining);
if ($min_numbers !== false) $characters .= substr(str_shuffle(str_repeat($numbers, $remaining)), 0, $remaining);
if ($min_specials !== false) $characters .= substr(str_shuffle(str_repeat($specials, $remaining)), 0, $remaining);
$password = str_shuffle($absolutes . substr($characters, 0, $remaining));
return $password;
}
参数$min_*可以有以下值:
1-999 =需要
True =可选
False =禁用
它可以像下面这样使用:
echo password_generate(8); // Outputs a random 8 characters long password
10个字符的密码,每组至少有2个字符:
echo password_generate(10, 2, 2, 2, 2);
只输出6个随机数
echo password_generate(6, false, false, true, false);