设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 3841|回复: 7
收起左侧

[PHP/ASP/JSP] 用PHP的时间戳函数实现取得真随机数的几种实现方法,无需任何srand()以及rand()等函数

[复制链接]
发表于 2017-9-30 10:51:56 | 显示全部楼层 |阅读模式
本帖最后由 糯米果子 于 2017-9-30 10:53 编辑

方法一:
循环取两次系统时间戳,相同则变量i加1,不同则跳出循环,同时变量i也就是取到的真随机数。

  1. <?php
  2. $i = 0; //定义累加次数(尝试次数)
  3. while(time() == time()){ //等待取的两次时间不同
  4.         $i++; //尝试次数加1

  5. }
  6. echo $i; //累加到的尝试次数也就是真随机数
  7. ?>
复制代码


方法二:
延迟一段时间取两次系统时间戳,取到的间隔为0则一直等待。

  1. <?php
  2. function aaa(){                 //返回1的概率不详
  3.         $time = time();                        //保存旧时间戳
  4.          //延迟一段时间 具体时间由CPU主频决定。
  5.         for($i=0;$i<=100;$i++);         //这个数值越大,返回1的概率也就越大
  6.         return time()-$time;                //取得新的时间戳并减去旧的时间戳
  7. }

  8. $strat_time = time(); //取开始时间戳
  9. $j =0; //尝试次数
  10.         while(aaa() == 0){ //等待时间戳间隔返回1,配置差的可能会出现超时错误
  11.                 $j++; //尝试次数加1
  12.         }

  13. echo $j."<br>"; //显示出尝试次数(真随机数)
  14. echo time()-$strat_time; //计算并显示出消耗时间


  15. ?>


复制代码


方法三:
通过执行两次microtime() 微秒级时间戳函数并比较值是否一致,通过这种方法取得随机二进制值。

  1. <?php
  2. function rand_bit(){ //取随机二进制
  3.         if(microtime(TRUE) == microtime(TRUE)){ //两次取到的微秒级时间戳一致则返回1
  4.                 return 1;
  5.                 } else { //不一致则返回0
  6.                 return 0;

  7.         }

  8. }

  9. function rand_byte(){ //取随机字节 范围0~225
  10.         $r = 0;  //返回值
  11.         for($i=1;$i<256;$i<<=1){ //从1移位到128
  12.                 if(rand_bit()){ //随机二进制位取到1
  13.                 $r |= $i; //返回值位或当前移位值
  14.                 }
  15.         }
  16.         return $r; //返回随机字节
  17. }

  18. for($a=0;$a<256;$a++){ //取256组随机字节
  19.         echo rand_byte().",";
  20. }
  21. ?>

复制代码





相关帖子

发表于 2017-9-30 11:06:58 | 显示全部楼层
前两种方法太慢了,第三种还差不多。
发表于 2017-9-30 14:49:32 | 显示全部楼层
这玩意还可以,六六六
发表于 2017-9-30 17:20:22 | 显示全部楼层
这也可以,那要rand函数有什么用??
发表于 2017-9-30 19:39:01 来自手机 | 显示全部楼层
把这源码放在天河二号上应该或许是另一种结果...
发表于 2017-10-1 19:45:23 | 显示全部楼层
QAQ 发表于 2017-9-30 19:39
把这源码放在天河二号上应该或许是另一种结果...

应该啥都取不到,太快了。

发表于 2019-4-10 06:56:03 来自手机 | 显示全部楼层
配置越高反而越取不到
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-18 22:00 , Processed in 0.577033 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表