Heim > Artikel > Backend-Entwicklung > Welche Möglichkeiten gibt es, Zufallszahlen in PHP zu generieren?
Dieses Mal werde ich Ihnen einige Methoden zum Generieren von Zufallszahlen in PHP vorstellen und welche Vorsichtsmaßnahmen für das Generieren von Zufallszahlen in PHP gelten. Hier ist ein praktischer Fall, schauen wir uns das an.
Die erste Methode verwendet mt_rand()
function GetRandStr($length){ $str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $len=strlen($str)-1; $randstr=''; for($i=0;$i<$length;$i++){ $num=mt_rand(0,$len); $randstr .= $str[$num]; } return $randstr; } $number=GetRandStr(6); echo $number;
Zweite Methode (am schnellsten)
function make_password( $length = 8 ) { // 密码字符集,可任意添加你需要的字符 $chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@','#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '[', ']', '{', '}', '<', '>', '~', '`', '+', '=', ',', '.', ';', ':', '/', '?', '|'); // 在 $chars 中随机取 $length 个数组元素键名 $keys = array_rand($chars, $length); $password = ''; for($i = 0; $i < $length; $i++) { // 将 $length 个数组元素连接成字符串 $password .= $chars[$keys[$i]]; } return $password; }
Die dritte Methode verwendet den aktuellen Zeitstempel
function get_password( $length = 8 ) { $str = substr(md5(time()), 0, $length);//md5加密,time()当前时间戳 return $str; }
Die vierte Art der verschlüsselten Zeichenfolge
function getrandstr(){ $str='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'; $randStr = str_shuffle($str);//打乱字符串 $rands= substr($randStr,0,6);//substr(string,start,length);返回字符串的一部分 return $rands; }
//Beginne mit der Erstellung des Bestätigungscodes (wird direkt mithilfe einer Funktion generiert, was bequemer und schneller ist)
$code = rand(10000, 99999);
Vergleich der Auswirkungen der Erzeugung zufälliger Dezimalzahlen von 0 bis 1 durch php mt_rand
lcg_value-Beschreibung
float lcg_value (void)
lcg_value() gibt eine Pseudozufallszahl im Bereich (0, 1) zurück. Diese Funktion kombiniert zwei Kongruenzgeneratoren mit den Perioden 2^31 - 85 und 2^31 - 249. Die Periode dieser Funktion ist gleich dem Produkt dieser beiden Primzahlen.
Rückgabe: eine Pseudozufallszahl im Bereich (0, 1).
<?php for($i=0; $i<5; $i++){ echo lcg_value().PHP_EOL; } ?>
Ausgabe:
0.11516515851995
0.064684551575297
0.68275174031189
0.55730746529099
0.70215008878091
Vergleich zweier Methoden zur Generierung zufälliger Dezimalzahlen von 0 bis 1
1. Vergleich der Ausführungszeit
Die Laufzeit der Ausführung des Algorithmus basierend auf mt_rand() und mt_getrandmax() beträgt 100.000 Mal
<?php /** * 生成0~1随机小数 * @param Int $min * @param Int $max * @return Float */ function randFloat($min=0, $max=1){ return $min + mt_rand()/mt_getrandmax() * ($max-$min); } // 获取microtime function get_microtime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; } // 记录开始时间 $starttime = get_microtime(); // 执行10万次获取随机小数 for($i=0; $i<100000; $i++){ randFloat(); } // 记录结束时间 $endtime = get_microtime(); // 输出运行时间 printf("run time %f ms\r\n", ($endtime-$starttime)*1000); ?>
Ausgabe: Laufzeit 266,893148 ms
Laufzeit der 100.000-maligen Ausführung von lcg_value()
<?php // 获取microtime function get_microtime(){ list($usec, $sec) = explode(' ', microtime()); return (float)$usec + (float)$sec; } // 记录开始时间 $starttime = get_microtime(); // 执行10万次获取随机小数 for($i=0; $i<100000; $i++){ lcg_value(); } // 记录结束时间 $endtime = get_microtime(); // 输出运行时间 printf("run time %f ms\r\n", ($endtime-$starttime)*1000); ?>
Ausgabe: Laufzeit 86,178064 ms
Vergleich der Ausführungszeit, da lcg_value() direkt eine native PHP-Methode ist, während mt_rand() und mt_getrandmax() zwei Methoden aufrufen und berechnet werden müssen, sodass die Ausführungszeit von lcg_value() etwa dreimal schneller ist.
2. Vergleich zufälliger Effekte
Zufälliger Effekt basierend auf den Algorithmen mt_rand() und mt_getrandmax()
<?php /** * 生成0~1随机小数 * @param Int $min * @param Int $max * @return Float */ function randFloat($min=0, $max=1){ return $min + mt_rand()/mt_getrandmax() * ($max-$min); } header('content-type: image/png'); $im = imagecreatetruecolor(512, 512); $color1 = imagecolorallocate($im, 255, 255, 255); $color2 = imagecolorallocate($im, 0, 0, 0); for($y=0; $y<512; $y++){ for($x=0; $x<512; $x++){ $rand = randFloat(); if(round($rand,2)>=0.5){ imagesetpixel($im, $x, $y, $color1); }else{ imagesetpixel($im, $x, $y, $color2); } } } imagepng($im); imagedestroy($im); ?>
Der zufällige Effekt von lcg_value()
<?php header('content-type: image/png'); $im = imagecreatetruecolor(512, 512); $color1 = imagecolorallocate($im, 255, 255, 255); $color2 = imagecolorallocate($im, 0, 0, 0); for($y=0; $y<512; $y++){ for($x=0; $x<512; $x++){ $rand = lcg_value(); if(round($rand,2)>=0.5){ imagesetpixel($im, $x, $y, $color1); }else{ imagesetpixel($im, $x, $y, $color2); } } } imagepng($im); imagedestroy($im); ?>
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!
Empfohlene Lektüre:
Ein Anfängerleitfaden für Anaconda
So installieren Sie Bibliotheken von Drittanbietern in Anaconda in Win
Das obige ist der detaillierte Inhalt vonWelche Möglichkeiten gibt es, Zufallszahlen in PHP zu generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!