我們創建密碼的規則之一是,它不應該包含數字或字母序列。對數字和字母順序的PHP驗證檢查
ex.12345,pwd45678,pwd_abcdef,pwd_abc123
所有這些都是不允許的。
任何建議如何檢查序列? 按順序表示它不應該像數字1-10或字母表中的字母那樣排列順序。所以密碼不應該包含1-10個字母順序或順序和數字。因此不允許包含ABC或DEF或HIJK的密碼,並且不允許包含像1234或4567這樣的號碼命令的密碼,但包含ABNOE或19334的密碼是可以的。
TIA
我們創建密碼的規則之一是,它不應該包含數字或字母序列。對數字和字母順序的PHP驗證檢查
ex.12345,pwd45678,pwd_abcdef,pwd_abc123
所有這些都是不允許的。
任何建議如何檢查序列? 按順序表示它不應該像數字1-10或字母表中的字母那樣排列順序。所以密碼不應該包含1-10個字母順序或順序和數字。因此不允許包含ABC或DEF或HIJK的密碼,並且不允許包含像1234或4567這樣的號碼命令的密碼,但包含ABNOE或19334的密碼是可以的。
TIA
因爲沒有兩個相鄰的數字或字母特定規則:
if (preg_match("#(\d{2,}|[[:alpha:]]{2,})#u", $input)) { return false; }
你可以嘗試一下here。
但是,有專門用於密碼強度檢查的packages available。他們將有可配置的規則或測試。
您可以使用下面的代碼,我用了「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;
}
嗨,我想我不清楚序列,我已經更新了我的問題以及數字序列字母表示包含ABC或DEF或GHI或123或234或345或789的密碼是不允許的。該序列還意味着從1-10的數字順序或字母表中的字母,如abcdefgh .... –
你爲什麼要限制人的密碼?它只會導致使用更糟糕的密碼。 – Andreas
你的意思是你只允許('編號,然後是字母,然後是數字,然後是字母,...)'只有這樣的'1a2b3c4d5f'這樣的密碼? –
是的,類似的東西。這只是他們提供的條件之一,密碼還應該包含至少1個大寫字母和一個特殊字符,但我已經使用preg_match捕獲了它,只有數字或字母序列丟失。也只是要添加,如果這只是規則中的一個*,序列應該不小於3. –