PHP:
Generazione di numeri casuali
Come fare:
PHP offre diverse funzioni per generare numeri casuali, ma le più comunemente usate sono rand()
, mt_rand()
e, per scopi crittografici, random_int()
.
Per generare un numero casuale semplice tra 0 e getrandmax() (il valore più grande possibile restituito da rand()
), puoi usare:
echo rand();
Per un intervallo più specifico, come tra 1 e 100:
echo rand(1, 100);
Tuttavia, mt_rand()
è una scelta migliore per la velocità e la casualità:
echo mt_rand(1, 100);
L’output per entrambi potrebbe essere qualsiasi cosa tra 1 e 100, a seconda della casualizzazione, ad esempio, 42
.
Per contesti crittografici o di sicurezza, dove l’imprevedibilità è fondamentale, random_int()
è la scelta preferita poiché genera interi pseudo-casuali crittograficamente sicuri:
echo random_int(1, 100);
Anche in questo caso, l’output è un numero casuale tra 1 e 100, come 84
, ma con una garanzia più forte di casualità.
Approfondimento
La funzione rand()
è presente in PHP dalle sue prime versioni, fungendo come l’approccio iniziale per generare numeri casuali. Tuttavia, non è la scelta migliore per applicazioni che richiedono un elevato grado di casualità a causa del suo algoritmo relativamente prevedibile.
mt_rand()
, introdotto in PHP 4, si basa sull’algoritmo Mersenne Twister - di gran lunga superiore in termini di velocità e della casualità che può generare rispetto a rand()
. È rapidamente diventato l’opzione preferita per la maggior parte delle esigenze non criptografiche.
Per le applicazioni sensibili alla sicurezza, è stato introdotto random_int()
in PHP 7 per generare interi pseudo-casuali crittograficamente sicuri utilizzando byte casuali dal generatore di numeri casuali del sistema. È significativamente più sicuro di rand()
o mt_rand()
, rendendolo la scelta migliore per generare token, chiavi o altri elementi dove la prevedibilità potrebbe portare a vulnerabilità di sicurezza.
Nonostante questi miglioramenti, è fondamentale scegliere la funzione giusta in base al contesto dell’applicazione. Per l’uso generale, mt_rand()
è sufficiente, ma per tutto ciò che potrebbe essere preso di mira o sfruttato, random_int()
è la via da seguire, fornendo sia casualità che sicurezza.