lcg_value()
La funzione lcg_value() in PHP genera un numero pseudo-casuale float tramite il generatore congruenziale lineare (LCG).
La funzione lcg_value() in PHP è una funzione integrata che genera un float pseudo-casuale utilizzando l'algoritmo del generatore congruenziale lineare (LCG). Non richiede parametri e si basa su un seed interno fisso per produrre la sua sequenza. Questa pagina spiega cosa restituisce la funzione, come usarla, come scalarne l'output su un intervallo e quando conviene ricorrere a un'alternativa più sicura.
Cos'è la funzione lcg_value()?
Un generatore congruenziale lineare è un algoritmo classico e leggero per produrre una sequenza di numeri che sembrano casuali ma sono completamente determinati da un seed iniziale. PHP espone questo meccanismo tramite lcg_value(), che restituisce un float nell'intervallo (0, 1) — ovvero maggiore di 0 e minore di 1.
Due caratteristiche sono importanti nella pratica:
- Nessun argomento. Si chiama come
lcg_value()con parentesi vuote; passare argomenti non ha alcun effetto. - Risultato float. Restituisce sempre un
float, mai un intero. Per ottenere un intero è necessario scalare il risultato manualmente (mostrato di seguito).
Come usare la funzione lcg_value()
Utilizzare la funzione lcg_value() in PHP è semplice. Ecco un esempio di base:
In questo esempio, chiamiamo la funzione lcg_value() per generare un numero pseudo-casuale. Il risultato viene poi memorizzato in una variabile e mostrato a schermo.
Generare numeri in un intervallo specifico
Poiché lcg_value() restituisce un float compreso tra 0 e 1, è possibile scalarlo per adattarlo a un intervallo desiderato o per generare interi:
<?php
// Generate a random integer between 1 and 100
$min = 1;
$max = 100;
$random_int = (int)($min + lcg_value() * ($max - $min + 1));
echo $random_int;
?>Note importanti
- Non crittograficamente sicuro: L'algoritmo LCG è prevedibile e non deve essere utilizzato per attività sensibili alla sicurezza come la generazione di token, password o ID di sessione. Per scopi crittografici, utilizzare
random_int()orandom_bytes(). - Seed fisso: La funzione utilizza un seed interno fisso, il che significa che la sequenza di numeri sarà identica tra diverse esecuzioni dello script, a meno che il processo PHP non venga riavviato.
- Intervallo esclusivo: Il valore restituito non è mai esattamente 0 o 1, quindi la formula per gli interi scalati di cui sopra può includere in modo sicuro entrambi gli estremi dell'intervallo
$min–$max. - Deprecata in PHP 8.4: A partire da PHP 8.4,
lcg_value()è deprecata a favore di\Random\Randomizer::getFloat(). Funziona ancora ma genera un avviso di deprecazione, quindi nei nuovi codici è preferibile usare la nuova API.
lcg_value() vs. altre funzioni casuali
lcg_value() è una delle diverse funzioni per la casualità disponibili in PHP. La scelta dipende dalle esigenze:
- Per interi casuali in un intervallo,
rand()emt_rand()sono generalmente più comodi che scalarelcg_value()manualmente. - Per conoscere il limite superiore che tali generatori possono restituire, vedere
getrandmax()emt_getrandmax(). - Per sequenze riproducibili durante i test, inizializzare il generatore Mersenne Twister con
mt_srand(). - Per la casualità in contesti di sicurezza, preferire
random_int()rispetto a tutte le opzioni precedenti.
Conclusione
La funzione lcg_value() fornisce un modo semplice per generare float pseudo-casuali in PHP. Sebbene sia utile per simulazioni di base o applicazioni non legate alla sicurezza, lo sviluppo PHP moderno tende a favorire random_int() per una casualità e una sicurezza migliori. Ci auguriamo che questa guida ti aiuti a capire come utilizzare lcg_value() efficacemente nei tuoi progetti.