W3docs

mt_rand()

La funzione mt_rand() in PHP genera un numero intero casuale usando l'algoritmo Mersenne Twister. Scopri sintassi, parametri e utilizzo.

La funzione mt_rand() in PHP genera un numero intero casuale utilizzando l'algoritmo Mersenne Twister. Questa pagina tratta la sua sintassi e i suoi parametri, le differenze rispetto alla più vecchia rand(), come impostare il seed per risultati riproducibili e quando conviene usare un'alternativa crittograficamente sicura.

Cosa fa la funzione mt_rand()

mt_rand() restituisce un numero intero pseudo-casuale. "Pseudo-casuale" significa che i numeri provengono da un algoritmo deterministico alimentato da uno stato interno — sembrano casuali, ma lo stesso seed produce sempre la stessa sequenza. L'algoritmo Mersenne Twister utilizzato produce numeri di qualità superiore e più uniformemente distribuiti rispetto al generatore libc alla base della più vecchia rand(), e ha un periodo estremamente lungo (non si ripete per 2^19937 − 1 valori).

Da notare che mt_rand() non è crittograficamente sicura: se lo stato interno è noto o recuperabile, i valori futuri possono essere previsti. Per password, token, salt o qualsiasi cosa sensibile alla sicurezza, usa random_int().

Sintassi

mt_rand(): int
mt_rand(int $min, int $max): int
ParametroDescrizione
$minOpzionale. Il valore minimo che il risultato può assumere (incluso). Il valore predefinito è 0.
$maxOpzionale. Il valore massimo che il risultato può assumere (incluso). Il valore predefinito è mt_getrandmax().

Valore restituito: un numero intero casuale compreso tra $min e $max inclusi, oppure tra 0 e mt_getrandmax() se chiamata senza argomenti. Se $min è maggiore di $max, PHP emette un avviso e restituisce false.

Come usare la funzione mt_rand()

Chiamala con due argomenti per scegliere un numero in un intervallo inclusivo, oppure senza argomenti per ottenere un valore nell'intero intervallo disponibile:

php— editable, runs on the server

La prima chiamata limita l'output all'intervallo 1–100; la seconda copre l'intero intervallo, il cui limite superiore puoi verificare con mt_getrandmax() (di solito 2147483647).

Casi d'uso comuni

Simulare il lancio di un dado:

<?php
$roll = mt_rand(1, 6);
echo "You rolled a $roll\n";
?>

Scegliere un elemento casuale da un array generando un indice valido:

<?php
$colors = ['red', 'green', 'blue', 'yellow'];
$pick = $colors[mt_rand(0, count($colors) - 1)];
echo "Random color: $pick\n";
?>

Usare count($colors) - 1 come limite superiore è importante: gli indici degli array sono a base zero, quindi un array di quattro elementi ha indici validi da 0 a 3. (Per questo scopo specifico, array_rand() è un'opzione più diretta.)

Seed per risultati riproducibili

Poiché il Mersenne Twister è deterministico, impostare il seed con mt_srand() rende la sequenza ripetibile — utile per test, simulazioni o ogni volta che si ha bisogno che l'output "casuale" sia identico a ogni esecuzione:

<?php
mt_srand(42);
echo mt_rand(), "\n";   // same value every run for seed 42

mt_srand(42);           // reset to the same seed
echo mt_rand(), "\n";   // identical to the line above
?>

Senza un seed esplicito, PHP inizializza automaticamente il generatore, quindi ogni esecuzione produce un output diverso.

Alternativa sicura: random_int()

Quando la casualità non deve essere indovinabile — token di sessione, codici per il reset della password, chiavi API — mt_rand() non è lo strumento giusto. Usa random_int(), che attinge dalla sorgente crittograficamente sicura del sistema operativo:

<?php
// Cryptographically secure integer between 1 and 100
$secure = random_int(1, 100);
echo $secure, "\n";
?>

Condivide la stessa firma (int $min, int $max), quindi la sostituzione è immediata.

mt_rand() vs. rand()

A partire da PHP 7.1, rand() è un alias di mt_rand() e usa lo stesso motore Mersenne Twister, quindi si comportano in modo identico. Nelle versioni precedenti, rand() utilizzava il più debole generatore libc della piattaforma. Preferisci mt_rand() quando desideri risultati coerenti e di alta qualità tra le versioni di PHP.

Conclusione

mt_rand() è la funzione ideale per numeri interi pseudo-casuali veloci e di buona qualità in PHP. Usala per giochi, campionamento, shuffling e randomizzazione generale; inizializzala con mt_srand() quando hai bisogno di sequenze riproducibili; e passa a random_int() ogni volta che la sicurezza è importante.

Esercitazione

Pratica
Qual è lo scopo della funzione mt_rand() in PHP?
Qual è lo scopo della funzione mt_rand() in PHP?
Was this page helpful?