您现在的位置: 365建站网 > 365文章 > php生成随机数的三种方法

php生成随机数的三种方法

文章来源:365jz.com     点击数:415    更新时间:2017-08-15 18:52   参与评论

rand() 函数返回随机整数。

<?php
echo(rand();
echo(rand();
echo(rand(10,100))
?>

输出:

17757
3794
97

mt_rand() 使用 Mersenne Twister 算法返回随机整数。

<?php
echo(mt_rand());
echo(mt_rand());
echo(mt_rand(10,100));
?>

输出类似:

3150906288
513289678
35


PHP中函数rand和mt_rand的区别比较:

mt_rand() 比rand() 快四倍 
   
  很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。mt_rand() 函数是非正式用来替换它的。该函数用了 Mersenne Twister 中已知的特性作为随机数发生器,mt_rand() 可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。 


如何用php生成1-10之间的不重复随机数?

例1,使用shuffle函数生成随机数。

</>code

  1. <?php
  2. $arr=range(1,10);
  3. shuffle($arr);
  4. foreach($arr as $values)
  5. {
  6.  echo $values." ";
  7. }
  8. ?>

例2,使用array_unique函数生成随机数。

</>code

  1. <?php
  2. $arr=array();
  3. while(count($arr)<10)
  4. {
  5.  $arr[]=rand(1,10);
  6.  $arr=array_unique($arr);
  7. }
  8. echo implode(" ",$arr);
  9. ?>

例3,使用array_flip函数生成随机数,可以去掉重复值。

</>code

  1. <?php
  2. $arr=array();
  3. $count1=0;
  4. $count = 0;
  5. $return = array();
  6. while ($count < 10) 
  7.  {
  8.  $return[] = mt_rand(1, 10);
  9.  $return = array_flip(array_flip($return));
  10.  $count = count($return);
  11.  } //www.jb51.net
  12. foreach($return as $value)
  13.  {
  14.  echo $value." ";
  15.  }
  16. echo "<br/>";
  17. $arr=array_values($return);// 获得数组的值 
  18. foreach($arr as $key)
  19. echo $key." ";
  20. ?>

php随机数生成函数示例

</>code

  1. <?php
  2. function randpw($len=8,$format='ALL'){
  3. $is_abc = $is_numer = 0;
  4. $password = $tmp =''; 
  5. switch($format){
  6. case 'ALL':
  7. $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  8. break;
  9. case 'CHAR':
  10. $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  11. break;
  12. case 'NUMBER':
  13. $chars='0123456789';
  14. break;
  15. default :
  16. $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  17. break;
  18. } // www.jb51.net
  19. mt_srand((double)microtime()*1000000*getmypid());
  20. while(strlen($password)<$len){
  21. $tmp =substr($chars,(mt_rand()%strlen($chars)),1);
  22. if(($is_numer <> 1 && is_numeric($tmp) && $tmp > 0 )|| $format == 'CHAR'){
  23. $is_numer = 1;
  24. }
  25. if(($is_abc <> 1 && preg_match('/[a-zA-Z]/',$tmp)) || $format == 'NUMBER'){
  26. $is_abc = 1;
  27. }
  28. $password.= $tmp;
  29. }
  30. if($is_numer <> 1 || $is_abc <> 1 || empty($password) ){
  31. $password = randpw($len,$format);
  32. }
  33. return $password;
  34. }
  35. for($i = 0 ; $i < 10; $i++){
  36. echo randpw(8,'NUMBER');
  37. echo "<br>";
  38. }

 

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (415人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号