Heim Backend-Entwicklung PHP-Tutorial Detaillierte Erklärung von Pseudozufallszahlen und echten Zufallszahlen in PHP

Detaillierte Erklärung von Pseudozufallszahlen und echten Zufallszahlen in PHP

Jul 11, 2017 am 11:41 AM
php 实例 随机数

Dieser Artikel stellt hauptsächlich die detaillierte Erklärung von Pseudozufallszahlen und echten Zufallszahlen in PHP vor. Dieser Artikel erläutert zunächst die verwandten Konzepte von echten Zufallszahlen und Pseudozufallszahlen und gibt einen Vergleich der Verwendung von mt_rand()FunktionEin Beispielcode zur Generierung besserer Pseudozufallszahlen, Freunde, die ihn benötigen, können sich darauf beziehen

Zunächst muss festgestellt werden, dass der Computer keine absolut zufälligen Zufallszahlen generieren wird , der Computer kann nur „Pseudozufallszahlen“ generieren. Tatsächlich sind absolute Zufallszahlen nur ideale Zufallszahlen, egal wie sich der Computer entwickelt, er wird keine Folge absolut zufälliger Zahlen erzeugen. Computer können nur relativ zufällige Zahlen, also Pseudozufallszahlen, erzeugen.

Pseudozufallszahlen sind keine Pseudozufallszahlen. Das „Pseudo“ bedeutet hier regulär, was bedeutet, dass die von Computern generierten Pseudozufallszahlen sowohl zufällig als auch regelmäßig sind. Wie ist es zu verstehen? Die generierten Pseudozufallszahlen folgen manchmal bestimmten Regeln, manchmal folgen sie keinen Regeln; einige der Pseudozufallszahlen folgen bestimmten Regeln; Zum Beispiel: „Es gibt keine zwei Blätter mit der gleichen Form auf der Welt.“ Dies weist auf die Eigenschaften der Dinge hin, das heißt auf Zufälligkeit, aber die Blätter jedes Baumes haben ähnliche Formen, was die Gemeinsamkeit der Dinge darstellt , Regelmäßigkeit. Aus dieser Perspektive werden Sie wahrscheinlich die Tatsache akzeptieren, dass Computer nur Pseudozufallszahlen, aber keine absoluten Zufallszahlen generieren können.

Lassen Sie uns zunächst die Konzepte echter Zufallszahlen und Pseudozufallszahlen verstehen.

Echte Zufallszahlengeneratoren: Englisch: Echte Zufallszahlengeneratoren, abgekürzt als: TRNGs, sind Zufallszahlen, die durch unvorhersehbare physikalische Methoden generiert werden.

Pseudozufallszahlengeneratoren: Englisch: Pseudozufallszahlengeneratoren, abgekürzt als: PRNGs, werden von Computern mithilfe bestimmter Algorithmen generiert.

Vergleichen Sie die Bilder der Zufallszahlen, die durch die beiden Methoden generiert wurden.

Zufällige Bitmap, generiert von Random.org (die atmosphärisches Rauschen nutzt, das durch Gewitter in der Luft erzeugt wird):

Zufällige Bilder, generiert vom Rand ()-Funktion von PHP unter Windows:

Offensichtlich weisen die vom letztgenannten Pseudozufallszahlengenerator erzeugten Bilder diese offensichtlichen Streifen auf.

Der Code zur Verwendung der Rand-Random-Funktion von PHP zum Generieren dieses Bildes lautet:

Der Code lautet wie folgt:

//需要开启gd库
header("Content-type: image/png");
$im = imagecreatetruecolor(512, 512)
or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($im, 255, 255, 255);
for ($y=0; $y<512; $y++) {
for ($x=0; $x<512; $x++) {
if (rand(0,1) === 1) {
imagesetpixel($im, $x, $y, $white);
}
}
}
imagepng($im);
imagedestroy($im);
Nach dem Login kopieren

Tatsächlich nicht alles Pseudo -Zufälligkeit Die Wirkung von Zahlengeneratoren (PRNGs) ist so gering, aber es kommt einfach vor, dass die rand()-Funktion von PHP unter Windows so ist. Wenn derselbe Code unter Linux getestet wird, weist das resultierende Bild keine offensichtlichen Streifen auf. Wenn unter Windows die Funktion mt_rand() anstelle der Funktion rand() verwendet wird, ist der Effekt viel besser. Dies liegt daran, dass mt_rand() den Mersenne Twister-Algorithmus verwendet, um Zufallszahlen zu generieren. In der PHP-Dokumentation heißt es außerdem: mt_rand() kann Zufallswerte im Durchschnitt viermal schneller generieren als rand() von libc.

Das Folgende ist ein Beispielcode, der PHP verwendet, um bessere Pseudozufallszahlen als die Funktion mt_rand() zu generieren:

Der Code lautet wie folgt:

<?php
// get 128 pseudorandom bits in a string of 16 bytes
$pr_bits = &#39;&#39;;
// Unix/Linux platform?
$fp = @fopen(&#39;/dev/urandom&#39;,&#39;rb&#39;);
if ($fp !== FALSE) {
$pr_bits .= @fread($fp,16);
@fclose($fp);
}
// MS-Windows platform?
if (@class_exists(&#39;COM&#39;)) {
try {
$CAPI_Util = new COM(&#39;CAPICOM.Utilities.1&#39;);
$pr_bits .= $CAPI_Util->GetRandom(16,0);
// if we ask for binary data PHP munges it, so we
// request base64 return value. We squeeze out the
// redundancy and useless ==CRLF by hashing...
if ($pr_bits) { $pr_bits = md5($pr_bits,TRUE); }
} catch (Exception $ex) {
// echo &#39;Exception: &#39; . $ex->getMessage();
}
}
if (strlen($pr_bits) < 16) {
// do something to warn system owner that
// pseudorandom generator is missing
}
?>
Nach dem Login kopieren

Wenn PHP also echte Zufallszahlen generieren möchte, muss es dennoch externe Elemente aufrufen, um dies zu unterstützen!

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von Pseudozufallszahlen und echten Zufallszahlen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles