每天php都有相同的随机数


Same random number each day php

我想通过找到帖子的id来显示当天的报价,所以我使用种子作为最低和最高的id,所以每天我都会得到一个随机id,这将每天显示一个随机帖子。我每天都用这个生成相同的随机数:

mt_srand(crc32(date('D d F Y')));
echo $random = (mt_rand(1,8288));

这在php 5.3或更低版本上运行得很好,但在我的另一台服务器5.4.33版本上运行的很好。它不起作用,每次都会创建一个新的。我已经更改了php版本来测试这一点,似乎是这个版本影响了它。有没有其他方法可以每天生成一个"一致随机"数?我需要一个号码,这样我就可以查询数据库并每天显示特定的帖子。

我不想创建另一个表或添加另一行来为每个帖子添加日期,因为这意味着我必须为每个帖子创建未来的日期,而已经有太多的行无法这样做了。

看一看mt_srand的PHP手册,就会发现:

PHP中的MersenneTwister实现现在使用了一个新的种子Richard Wagner的算法。相同的种子不再产生与以前版本中的值序列相同。这种行为预计不会再次改变,但认为依赖它是不安全的尽管如此。

因此,您需要使用"bad-old"srandrand-函数。他们会产生你想要的结果。

我想补充最后一点:不要将这些函数(或mt_rand)用于此处所述的任何与安全相关的内容。

如果你需要一个每日ID,我想到的最简单的方法是:

$today_code = substr( date("D") , 0,1) .  substr( date("j") * date("Y") , 0, $your_desidered_lenght = 2);

这将产生一个格式为=A12的ID,其中"A"是一周的第一个字母,"12"是将为当天产生的整数。此技术ID为:

  • 作为代码,易于阅读
  • 作为输出,以某种方式可读。你肯定知道是在一周中的哪一天创建的
  • 易于灵活定制