Heim >Backend-Entwicklung >PHP-Tutorial >Welche Methoden gibt es zum Generieren von Zufallszahlen in PHP?
Dieses Mal werde ich Ihnen einige Methoden zum Generieren von Zufallszahlen in PHP vorstellen und welche Vorsichtsmaßnahmen es gibt , wie man Zufallszahlen in PHP generiert. Das Folgende 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;
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; }
Die dritte Methode besteht darin, den aktuellen Zeitstempel abzurufen
function get_password( $length = 8 ) { $str = substr(md5(time()), 0, $length);//md5加密,time()当前时间戳 return $str; }
Die vierte Methode 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; }//Mit der Erstellung beginnen
Bestätigungscode (Generieren Sie direkt mithilfe von Funktionen, was bequemer und schneller ist)
$code = rand(10000, 99999);Vergleich der Wirkung von PHP mt_rand beim Erzeugen von 0 bis 1 zufälligen Dezimalstellenlcg_value-Beschreibungfloat 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,115165158519950,064684551575297
0,68275174031189
0,55730746529099
0,70215008878091
Zwei Arten von Zufallsdezimalmethodenvergleich der Generation 0~1
1. Ausführungszeitvergleich
Die Laufzeit für die 100.000-malige Ausführung basierend auf mt_rand() und mt_getrandmax() Algorithmen<?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 msAusführungszeit von lcg_value() 100.000 Mal
<?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 msAusführungszeit im Vergleich Da lcg_value() direkt eine native PHP-Methode ist und mt_rand() und mt_getrandmax() zwei Methoden aufrufen und berechnet werden müssen, ist die Ausführungszeit von lcg_value() 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); ?>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:
Ausführliche Erklärung des Tutorials zur Installation von Alibaba Cloud Win2016 in der Apache- und PHP-Umgebung
Betrieb des assoziativen PHP-Arrays und Index-Array Detaillierte Erläuterung der Schritte
Das obige ist der detaillierte Inhalt vonWelche Methoden gibt es zum Generieren von Zufallszahlen in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!