Cette fonction génère un mot de passe aléatoire robuste en utilisant random_int()
pour garantir une sécurité cryptographique.
Elle accepte plusieurs paramètres : la longueur (minimum 12 par défaut), l'inclusion de symboles (activée par défaut),
l'inclusion de chiffres, de lettres minuscules et majuscules.
function generatePassword(
int $length = 12,
bool $includeSymbols = true,
bool $includeNumbers = true,
bool $includeLower = true,
bool $includeUpper = true
): string {
if ($length < 12) {
$length = 12;
}
$lower = 'abcdefghijklmnopqrstuvwxyz';
$upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$numbers = '0123456789';
$symbols = '!@#$%^&*()-_=+[]{}|;:,.<>?';
$allChars = '';
$password = '';
$requiredChars = [];
if ($includeLower) {
$allChars .= $lower;
$requiredChars[] = $lower[random_int(0, strlen($lower) - 1)];
}
if ($includeUpper) {
$allChars .= $upper;
$requiredChars[] = $upper[random_int(0, strlen($upper) - 1)];
}
if ($includeNumbers) {
$allChars .= $numbers;
$requiredChars[] = $numbers[random_int(0, strlen($numbers) - 1)];
}
if ($includeSymbols) {
$allChars .= $symbols;
$requiredChars[] = $symbols[random_int(0, strlen($symbols) - 1)];
}
if ($allChars === '') {
throw new Exception('Aucun type de caractère sélectionné pour le mot de passe.');
}
for ($i = 0; $i < $length - count($requiredChars); $i++) {
$password .= $allChars[random_int(0, strlen($allChars) - 1)];
}
$password .= implode('', $requiredChars);
$passwordArray = str_split($password);
shuffle($passwordArray);
return implode('', $passwordArray);
}
Explication :
- La fonction commence par assurer une longueur minimale de 12 caractères.
- Selon les options activées, elle construit un ensemble de caractères et sélectionne au moins un caractère de chaque type (minuscules, majuscules, chiffres, symboles).
- Le reste du mot de passe est généré aléatoirement, puis les caractères requis sont mélangés pour un résultat final sécurisé.