PHP验证检查数字和字母序列

时间:2017-07-23 15:55:01

标签: php

我们创建密码的规则之一是,它不应包含一系列数字或字母。

  

ex.12345,pwd45678,pwd_abcdef,pwd_abc123

所有这些都是不允许的。

有关如何检查序列的建议吗? 按顺序意义,它不应该是数字1-10或字母表中的字母的顺序。因此密码不应包含1-10顺序的字母序列或顺序和数字。因此,不允许使用包含ABC或DEF或HIJK的密码,并且不允许使用包含1234或4567等号码的密码,但包含ABNOE或19334的密码是可以的。

TIA

2 个答案:

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