Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Möglichkeiten gibt es, Zufallszahlen in PHP zu generieren?

Welche Möglichkeiten gibt es, Zufallszahlen in PHP zu generieren?

php中世界最好的语言
php中世界最好的语言Original
2018-04-11 09:17:381510Durchsuche

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(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;, &#39;h&#39;, 
 &#39;i&#39;, &#39;j&#39;, &#39;k&#39;, &#39;l&#39;,&#39;m&#39;, &#39;n&#39;, &#39;o&#39;, &#39;p&#39;, &#39;q&#39;, &#39;r&#39;, &#39;s&#39;, 
 &#39;t&#39;, &#39;u&#39;, &#39;v&#39;, &#39;w&#39;, &#39;x&#39;, &#39;y&#39;,&#39;z&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, 
 &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;I&#39;, &#39;J&#39;, &#39;K&#39;, &#39;L&#39;,&#39;M&#39;, &#39;N&#39;, &#39;O&#39;, 
 &#39;P&#39;, &#39;Q&#39;, &#39;R&#39;, &#39;S&#39;, &#39;T&#39;, &#39;U&#39;, &#39;V&#39;, &#39;W&#39;, &#39;X&#39;, &#39;Y&#39;,&#39;Z&#39;, 
 &#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;!&#39;, 
 &#39;@&#39;,&#39;#&#39;, &#39;$&#39;, &#39;%&#39;, &#39;^&#39;, &#39;&&#39;, &#39;*&#39;, &#39;(&#39;, &#39;)&#39;, &#39;-&#39;, &#39;_&#39;, 
 &#39;[&#39;, &#39;]&#39;, &#39;{&#39;, &#39;}&#39;, &#39;<&#39;, &#39;>', '~', '`', '+', '=', ',', 
 '.', ';', ':', '/', '?', '|'); 
 // 在 $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=&#39;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890&#39;; 
$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(&#39; &#39;, 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(&#39; &#39;, 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(&#39;content-type: image/png&#39;);
$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(&#39;content-type: image/png&#39;);
$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!

Stellungnahme:
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