Generazione di numeri casuali

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.