W3docs

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:

php— editable, runs on the server

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() o random_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() e mt_rand() sono generalmente più comodi che scalare lcg_value() manualmente.
  • Per conoscere il limite superiore che tali generatori possono restituire, vedere getrandmax() e mt_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.

Pratica

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