2017-07-23 68 views
-4

我們創建密碼的規則之一是,它不應該包含數字或字母序列。對數字和字母順序的PHP驗證檢查

ex.12345,pwd45678,pwd_abcdef,pwd_abc123

所有這些都是不允許的。

任何建議如何檢查序列? 按順序表示它不應該像數字1-10或字母表中的字母那樣排列順序。所以密碼不應該包含1-10個字母順序或順序和數字。因此不允許包含ABC或DEF或HIJK的密碼,並且不允許包含像1234或4567這樣的號碼命令的密碼,但包含ABNOE或19334的密碼是可以的。

TIA

+2

你爲什麼要限制人的密碼?它只會導致使用更糟糕的密碼。 – Andreas

+0

你的意思是你只允許('編號,然後是字母,然後是數字,然後是字母,...)'只有這樣的'1a2b3c4d5f'這樣的密碼? –

+0

是的,類似的東西。這只是他們提供的條件之一,密碼還應該包含至少1個大寫字母和一個特殊字符,但我已經使用preg_match捕獲了它,只有數字或字母序列丟失。也只是要添加,如果這只是規則中的一個*,序列應該不小於3. –

回答

1

因爲沒有兩個相鄰的數字或字母特定規則:

if (preg_match("#(\d{2,}|[[:alpha:]]{2,})#u", $input)) { return false; }

你可以嘗試一下here

但是,有專門用於密碼強度檢查的packages available。他們將有可配置的規則或測試。

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; 
    } 

+0

嗨,我想我不清楚序列,我已經更新了我的問題以及數字序列字母表示包含ABC或DEF或GHI或123或234或345或789的密碼是不允許的。該序列還意味着從1-10的數字順序或字母表中的字母,如abcdefgh .... –