Generare stringhe pseudocasuali in PHP
A volte capita di dover generare in automatico delle password pseudocasuali non-alfanumeriche all'interno di un'applicazione sviluppata in PHP.
Questo breve codice permette di generare una stringa di dimensione $pwdLength estraendo in modo pseudocasuale uno dei seguenti caratteri: "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWYXZ.#*-" (virgolette escluse).
Per aumentare maggiormente la complessità, sono stati aggiunti dei controlli in modo che lo stesso carattere non sia presente più di una volta.
Nel caso di caratteri alfabetici, il controllo di cui sopra è valido anche se un carattere è in minuscolo e uno in maiuscolo (e viceversa) rendendo impossibili combinazioni tipo aA e Bb.
# Lunghezza della password da generare
$pwdLength = 8;
# Elenco da cui "pescare" i caratteri che comporranno la password
$pwdChars = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWYXZ.#*-';
$pwdCharsLength = strlen($pwdChars);
# Questa variabile conterrà la password generata
$pseudo = "";
for ($i = 0; $i < $pwdLength; $i++) {
$charCheck = FALSE;
while (!$charCheck) {
# Estrazione di un carattere a caso
$charPos = mt_rand(0, $pwdCharsLength - 1);
# Verifica se il carattere è già presente
if (strstr($pseudo, strtoupper($pwdChars{$charPos})) === FALSE {
strstr($pseudo, strtolower($pwdChars{$charPos})) === FALSE) {
$pseudo .= $pwdChars{$charPos};
$charCheck = TRUE;
}
}
}
echo $pseudo;
Sembra un esercizio stupido, ma a volte sono le cose più stupide a portar via tempo utile per altre cose più complesse.
