Maison > Article > développement back-end > Résumé des méthodes pour générer des nombres aléatoires en PHP
Le nombre aléatoire est une méthode très couramment utilisée. Cet article résume les méthodes de génération de nombres aléatoires en PHP. Il est divisé en quatre méthodes et la comparaison entre chaque méthode peut s'y référer.
La première méthode utilise 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;
La deuxième méthode (la plus rapide)
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; }
La troisième façon est d'obtenir l'horodatage actuel
function get_password( $length = 8 ) { $str = substr(md5(time()), 0, $length);//md5加密,time()当前时间戳 return $str; }
La quatrième façon est de brouiller la chaîne
function getrandstr(){ $str='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'; $randStr = str_shuffle($str);//打乱字符串 $rands= substr($randStr,0,6);//substr(string,start,length);返回字符串的一部分 return $rands; }
/ /Commencer à créer un code de vérification (générer directement avec la fonction, plus pratique et plus rapide)
$code = rand(10000, 99999);
Comparaison de l'effet de php mt_rand générant 0~1 décimales aléatoires
description de lcg_value
float lcg_value ( void )
lcg_value() renvoie un nombre pseudo-aléatoire dans la plage (0, 1). Cette fonction combine deux générateurs congruents avec des périodes 2^31 - 85 et 2^31 - 249. La période de cette fonction est égale au produit de ces deux nombres premiers.
Retours : nombre pseudo-aléatoire compris dans la plage (0, 1).
<?php for($i=0; $i<5; $i++){ echo lcg_value().PHP_EOL; } ?>
Sortie :
0,11516515851995
0,064684551575297
0,68275174031189
0,557307465 2909 9
0.70215008878091
Comparaison de deux méthodes de génération de décimales aléatoires de 0 à 1
1. Comparaison du temps d'exécution
Exécution 100 000 fois basée sur mt_rand() et mt_getrandmax( )Le temps d'exécution de l'algorithme
<?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); ?>
Sortie : temps d'exécution 266,893148 ms
Le temps d'exécution de l'exécution de lcg_value() 100 000 fois
<?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); ?>
Sortie : temps d'exécution 86,178064 ms
Comparaison du temps d'exécution, car lcg_value() est directement une méthode PHP native, et mt_rand() et mt_getrandmax() doivent appeler deux méthodes et doivent être calculées, donc le exécution de lcg_value() Le temps est environ 3 fois plus rapide.
2. Comparaison des effets aléatoires
Effet aléatoire basé sur les algorithmes mt_rand() et 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); ?>
Effet aléatoire de 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); ?>
Recommandations associées :
Implémentation JS du partage de code de nombres aléatoires
Méthode d'implémentation du générateur de nombres aléatoires JavaScript
Comment générer des nombres aléatoires et concaténer des chaînes dans MySQL
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!