La fonction STR_SPLIT dans PHP divise une chaîne dans un tableau, chaque élément de tableau contient un caractère dans la chaîne. La syntaxe de base est la suivante:
str_split(string $string, int $length = 1): array
$ String : la chaîne à diviser.
$ Longueur : la longueur de chaque élément de tableau, par défaut à 1.
Par exemple, appeler str_split ("abcdef") renverra ['a', 'b', 'c', 'd', 'e', 'f'] .
Afin de déterminer la force d'un mot de passe, nous considérons généralement les aspects suivants:
Longueur : La longueur du mot de passe doit être suffisamment longue, généralement au moins 8 caractères sont nécessaires.
Inclure les numéros : le mot de passe doit contenir des nombres.
Inclure des lettres majuscules : le mot de passe doit contenir au moins une lettre majuscule.
Inclure les lettres minuscules : le mot de passe doit contenir au moins une lettre minuscule.
Contient des caractères spéciaux : le mot de passe doit contenir au moins un caractère spécial, tel que @ , # , $ , etc.
Nous pouvons utiliser STR_SPLIT pour diviser le mot de passe en un tableau et vérifier chaque caractère dans le tableau pour déterminer si le mot de passe répond aux exigences de force ci-dessus. Voici un exemple simple de code:
<?php
function check_password_strength($password) {
// Vérifier la durée du mot de passe
if (strlen($password) < 8) {
return "La longueur du mot de passe est au moins 8 Personnages";
}
// utiliser str_split Diviser les mots de passe sous forme de tableaux
$password_array = str_split($password);
// Initialiser les drapeaux
$has_upper = false;
$has_lower = false;
$has_digit = false;
$has_special = false;
// Itérer dans le tableau,检查每Personnages
foreach ($password_array as $char) {
if (ctype_upper($char)) {
$has_upper = true;
} elseif (ctype_lower($char)) {
$has_lower = true;
} elseif (is_numeric($char)) {
$has_digit = true;
} elseif (preg_match('/[!@#$%^&*(),.?":{}|<>]/', $char)) {
$has_special = true;
}
}
// Vérifiez si toutes les conditions sont remplies
if (!$has_upper) {
return "les mots de passe doivent contenir au moins une majuscule";
}
if (!$has_lower) {
return "Le mot de passe doit contenir au moins une lettre minuscule";
}
if (!$has_digit) {
return "Le mot de passe doit contenir au moins un numéro";
}
if (!$has_special) {
return "Le mot de passe doit contenir au moins un caractère spécial";
}
return "Force de mot de passe";
}
// Test d'échantillonnage
$password = "P@ssw0rd";
echo check_password_strength($password); // Sortir:Force de mot de passe
?>
str_split ($ mot de passe) : divisez la chaîne de mot de passe en un tableau pour faciliter la vérification des caractères.
CTYPE_UPPER ($ char) : Vérifiez si le personnage est majuscule.
CTYPE_LOWER ($ CHAR) : Vérifiez si le personnage est minuscule.
is_numeric ($ char) : vérifiez si le caractère est un nombre.
preg_match ('/ [! @ # $% ^ & * (),.? ": {} | <>] /', $ char) : Vérifiez si le personnage est un caractère spécial.
Bien que les règles de détection mentionnées ci-dessus puissent améliorer efficacement la sécurité des mots de passe, nous pouvons encore améliorer davantage la rigueur de la détection des mots de passe. Considérer:
Les mots de passe restreints ne peuvent pas contenir d'informations courantes sur les utilisateurs (tels que le nom d'utilisateur, le courrier électronique, l'anniversaire, etc.).
Cryptez les mots de passe utilisant des algorithmes de hachage tels que SHA-256 ou BCrypt pour s'assurer qu'ils ne peuvent pas être directement craqués même si le mot de passe est divulgué.