W3docs

rand()

La funzione rand() in PHP genera un numero intero casuale. Scopri sintassi, utilizzo e differenze con mt_rand().

La funzione rand() in PHP genera un numero intero pseudo-casuale. Questo capitolo tratta la sua sintassi, il funzionamento degli argomenti opzionali per l'intervallo, la differenza tra rand() e il più veloce mt_rand(), perché non dovresti mai usare nessuno dei due per la sicurezza, e alcuni pattern pratici come lanciare un dado o scegliere un elemento casuale da un array.

Cosa fa la funzione rand()

rand() è una funzione PHP integrata che restituisce un intero casuale. Senza argomenti restituisce un valore compreso tra 0 e getrandmax() (il valore più grande che il generatore può produrre — almeno 32767). Quando si passano $min e $max, restituisce un intero nell'intervallo inclusivo $min ≤ n ≤ $max.

Produce numeri pseudo-casuali: valori che sembrano casuali ma sono generati da un algoritmo deterministico a partire da un seme interno. Va benissimo per giochi, campionamenti e dati di test, ma non per situazioni in cui la prevedibilità rappresenta un rischio (vedi Sicurezza di seguito).

Sintassi

rand(): int
rand(int $min, int $max): int
ParametroDescrizione
$minOpzionale. Il valore minimo da restituire. Predefinito a 0.
$maxOpzionale. Il valore massimo da restituire. Predefinito a getrandmax().

$min e $max sono inclusivi, quindi rand(1, 6) può restituire 1, 6, o qualsiasi valore intermedio. Se si passa $min maggiore di $max, PHP 8 genera un ValueError.

Utilizzo di base

php— editable, runs on the server

Qui chiamiamo rand() con un intervallo, memorizziamo il risultato in $result e lo stampiamo. Esegui l'esempio alcune volte e otterrai un numero diverso ad ogni esecuzione.

Casi d'uso comuni

Alcuni pattern che userai spesso:

<?php
// 1. Roll a six-sided die
$die = rand(1, 6);

// 2. Pick a random element from an array
$colors = ['red', 'green', 'blue'];
$color  = $colors[rand(0, count($colors) - 1)];

// 3. A coin flip
$side = rand(0, 1) === 0 ? 'heads' : 'tails';

echo "Die: $die, Color: $color, Coin: $side";
?>

Per selezionare un elemento da un array, PHP offre anche il dedicato array_rand(), che è più chiaro rispetto al calcolo manuale dell'indice.

rand() vs mt_rand()

mt_rand() utilizza l'algoritmo Mersenne Twister. È più veloce e ha migliori proprietà statistiche rispetto al legacy rand(), quindi è la scelta preferita per uso generale. I due condividono la stessa firma:

<?php
$a = rand(1, 100);     // legacy generator
$b = mt_rand(1, 100);  // Mersenne Twister — recommended
echo "$a and $b";
?>

Da PHP 7.1, rand() è in realtà un alias di mt_rand() internamente, quindi si comportano allo stesso modo sui PHP moderni. Preferisci mt_rand() nel nuovo codice per chiarezza. Il suo compagno mt_getrandmax() indica il valore più grande che può restituire.

Inizializzazione del seme

Puoi inizializzare il generatore con srand() (o mt_srand() per mt_rand()). L'inizializzazione con un valore fisso rende la sequenza riproducibile — utile per i test:

<?php
srand(42);
echo rand(1, 100), "\n"; // same output every run for seed 42
?>

Da PHP 4.2 non hai quasi mai bisogno di chiamare srand() manualmente — PHP inizializza il generatore automaticamente al primo utilizzo.

Quando non usare rand()

rand() e mt_rand() non sono crittograficamente sicuri. Il loro output è prevedibile, quindi non usarli mai per password, token, ID di sessione, link di reimpostazione password o qualsiasi cosa sensibile alla sicurezza. Per questi casi, usa un CSPRNG:

<?php
$secureInt   = random_int(1, 100);     // cryptographically secure integer
$secureBytes = random_bytes(16);       // 16 random bytes
echo $secureInt, ' ', bin2hex($secureBytes);
?>

random_int() ha la stessa firma (min, max) di rand(), quindi è generalmente un sostituto immediato quando la sicurezza è importante.

  • rand($min, $max) restituisce un intero pseudo-casuale in un intervallo inclusivo; senza argomenti copre da 0 a getrandmax().
  • Preferisci mt_rand() per uso generale — è più veloce e con distribuzione migliore (e rand() è un suo alias da PHP 7.1).
  • Usa random_int() / random_bytes() ogni volta che il valore deve essere imprevedibile.

Per ulteriori informazioni sui valori numerici e gli helper matematici, consulta PHP Numbers e PHP Math.

Esercitazione

Pratica
Cosa fa la funzione rand() in PHP?
Cosa fa la funzione rand() in PHP?
Was this page helpful?