Signatur
Beschreibung
lcg_value() verwendet einen linearen Kongruenzgenerator (LCG), um eine Pseudozufallszahl als Gleitkommazahl im offenen Intervall (0, 1) zurückzugeben. Der Wert ist dabei stets größer als 0 und kleiner als 1, die Grenzen selbst sind ausgeschlossen.
Der Algorithmus kombiniert zwei separate LCG-Sequenzen, um eine bessere Verteilung zu erzielen. Da es sich jedoch um einen deterministischen Algorithmus handelt, sind die erzeugten Zahlen nicht kryptografisch sicher und sollten niemals für sicherheitsrelevante Zwecke wie Passwörter, Tokens oder Verschlüsselung verwendet werden.
Für einfache statistische Simulationen, Spiellogik oder andere nicht-sicherheitskritische Anwendungen kann lcg_value() eingesetzt werden. Wer eine gleichmäßige Zufallsverteilung über einen größeren Wertebereich benötigt, greift besser zu mt_rand() oder random_int().
Die Funktion akzeptiert keine Parameter und benötigt keinen manuellen Saat-Wert (Seed), da die Initialisierung automatisch beim Start des PHP-Prozesses erfolgt.
Rückgabewert
float im offenen Intervall (0, 1) — also stets größer als 0.0 und kleiner als 1.0.Beispiele
Einfache Zufallszahl ausgeben
<?php
$zufallszahl = lcg_value();
echo $zufallszahl; // z. B. 0.73849201234567
Skalierung auf einen benutzerdefinierten Bereich
<?php
// Zufallszahl im Bereich [1, 100] erzeugen
$min = 1;
$max = 100;
$zufallszahl = (int) ($min + lcg_value() * ($max - $min + 1));
echo "Zufallszahl zwischen $min und $max: $zufallszahl";
Mehrere Werte zur Verteilungsprüfung ausgeben
<?php
// 5 Pseudozufallswerte ausgeben
for ($i = 0; $i < 5; $i++) {
echo number_format(lcg_value(), 6) . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitswarnung: lcg_value() ist nicht kryptografisch sicher. Für sicherheitsrelevante Anwendungen wie die Erzeugung von Passwörtern, Session-Tokens, kryptografischen Schlüsseln oder ähnlichem müssen stattdessen random_int(), random_bytes() oder Funktionen aus der openssl_random_pseudo_bytes()-Familie verwendet werden.
Die Qualität der erzeugten Zufallszahlen ist geringer als die von mt_rand(), das auf dem Mersenne-Twister-Algorithmus basiert. Für die meisten praktischen Anwendungen ist mt_rand() daher die bessere Wahl.
Die Funktion gibt keine Werte für die Grenzen 0.0 und 1.0 zurück, was beim Skalieren auf andere Bereiche berücksichtigt werden sollte.