Heim > Artikel > Backend-Entwicklung > Zusammenfassung der Methoden zum Generieren von Zufallszahlen in PHP
Zufallszahlen sind eine sehr häufig verwendete Methode. In diesem Artikel werden die Methoden zum Generieren von Zufallszahlen zusammengefasst. Der Vergleich zwischen den einzelnen Methoden ist möglich.
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;
Die 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; }
Der dritte Weg besteht darin, den aktuellen Zeitstempel abzurufen
function get_password( $length = 8 ) { $str = substr(md5(time()), 0, $length);//md5加密,time()当前时间戳 return $str; }
Der vierte Weg besteht darin, die Zeichenfolge zu verschlüsseln
function getrandstr(){ $str='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'; $randStr = str_shuffle($str);//打乱字符串 $rands= substr($randStr,0,6);//substr(string,start,length);返回字符串的一部分 return $rands; }
/ / Beginnen Sie mit der Erstellung des Bestätigungscodes (generieren Sie ihn direkt mit der Funktion, bequemer und schneller)
$code = rand(10000, 99999);
Vergleich der Wirkung von PHP mt_rand, der 0 bis 1 zufällige Dezimalstellen generiert
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: 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,557307465. 290 99
0,70215008878091
Vergleich zweier Methoden zur Generierung zufälliger Dezimalzahlen von 0 bis 1
1. Ausführungszeitvergleich
100.000-fache Ausführung basierend auf mt_rand() und mt_getrandmax( )Die Laufzeit des Algorithmus
<?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
Die 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 und mt_rand() und mt_getrandmax() zwei Methoden aufrufen und berechnet werden müssen, also die Ausführung von lcg_value() Die Zeit ist etwa dreimal schneller.
2. Zufälliger Effektvergleich
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); ?>
Zufälliger 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); ?>
Verwandte Empfehlungen:
JS-Implementierung der gemeinsamen Nutzung von Zufallszahlencodes
Implementierungsmethode für den JavaScript-Zufallszahlengenerator
So generieren Sie Zufallszahlen und verketten Zeichenfolgen in MySQL
Das obige ist der detaillierte Inhalt vonZusammenfassung der Methoden zum Generieren von Zufallszahlen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!