I want to have an php check for easy passwords patterns like
123456
123456789
abcde
98764321
101010
202020
Is it possible to have a check like this that doesn't rely in maintaining an array of pre-defined strings ?
I want to have an php check for easy passwords patterns like
123456
123456789
abcde
98764321
101010
202020
Is it possible to have a check like this that doesn't rely in maintaining an array of pre-defined strings ?
 
    
    Just iterate to each letter and check if the next one is same, one less or one more as current. So you can create a score of uniqueness.
For last case you can check if there are duplicate characters and remove from score, too.
$passwords = ['123456', '123456789', 'abcde', '98764321', '101010', '202020', 'xhdgszu'];
foreach ($passwords as $password) {
    $score = $length = strlen($password);
    $chars = str_split($password);
    for ($i = 0; $i < $length - 1; $i++) {
        $currentChar = $chars[$i];
        $nextChar = $chars[$i + 1];
        if ($currentChar === $nextChar
            || ord($currentChar) - 1 === ord($nextChar)
            || ord($currentChar) + 1 === ord($nextChar)
        ) {
            $score--;
            continue;
        }
    }
    $unique = array_unique($chars);
    $score -= $length - count($unique);
    echo "{$password}: {$score} / {$length} ", ($score < $length) ? 'Bad' : 'Good', PHP_EOL;
}
123456: 1 / 6 Bad
123456789: 1 / 9 Bad
abcde: 1 / 5 Bad
98764321: 2 / 8 Bad
101010: -3 / 6 Bad
202020: 2 / 6 Bad
xhdgszu: 7 / 7 Good
