我们创建密码的规则之一是,它不应包含一系列数字或字母。
ex.12345,pwd45678,pwd_abcdef,pwd_abc123
所有这些都是不允许的。
有关如何检查序列的建议吗? 按顺序意义,它不应该是数字1-10或字母表中的字母的顺序。因此密码不应包含1-10顺序的字母序列或顺序和数字。因此,不允许使用包含ABC或DEF或HIJK的密码,并且不允许使用包含1234或4567等号码的密码,但包含ABNOE或19334的密码是可以的。
TIA
答案 0 :(得分:1)
没有2个相邻数字或字母的特定规则:
if (preg_match("#(\d{2,}|[[:alpha:]]{2,})#u", $input)) {
return false;
}
您可以尝试here。
但是,packages available专门用于密码强度检查。他们将有可配置的规则或测试。
答案 1 :(得分:0)
您可以使用下面的代码,我使用“asci代码”来解决问题,它已经针对您的示例进行了测试:
<?php
$passwords = [
'12345',
'pwd45678',
'pwd_abcdef',
'pwd_abc123',
];
var_dump(check_password_sequence($passwords[3], 4));
function check_password_sequence($password, $max) {
$j = 0;
$lenght = strlen($password);
for($i = 0; $i < $lenght; $i++) {
if(isset($password[$i+1]) && ord($password[$i]) + 1 === ord($password[$i+1])) {
$j++;
} else {
$j = 0;
}
if($j === $max) {
return true;
}
}
return false;
}
<?php
$passwords = [
'12345',
'pwd45678',
'pwd_abcdef',
'pwd_abc123',
];
var_dump(check_password_sequence($passwords[3], 4));
function check_password_sequence($password, $max) {
$j = 0;
$lenght = strlen($password);
for($i = 0; $i < $lenght; $i++) {
if(isset($password[$i+1]) && ord($password[$i]) + 1 === ord($password[$i+1])) {
$j++;
} else {
$j = 0;
}
if($j === $max) {
return true;
}
}
return false;
}