每天相同的随机数 php
Same random number each day php
我想通过找到 post 的 ID 来显示当天的报价,所以我使用种子作为最低和最高 ID,所以每天我都会得到一个随机 ID,这个每天将随机显示一个 post。
我每天都用它来生成相同的随机数:
mt_srand(crc32(date('D d F Y')));
echo $random = (mt_rand(1,8288));
这在 php 版本 5.3 或更低版本上完美运行,但在我的其他服务器之一,即版本 5.4.33 上。它不起作用,每次总是创建一个新的。我已经更改了 php 版本来测试它,似乎是影响它的版本。
还有其他方法可以每天生成一个 'consistent random' 号码吗?我需要一个数字,以便我可以查询数据库并每天显示特定的 post。
我不想创建另一个 table 或添加另一行来为每个 post 添加日期,因为这意味着我必须为每个 post 创建未来的日期并且已经有太多行无法执行此操作。
看一眼 PHP manual for mt_srand 就知道:
The Mersenne Twister implementation in PHP now uses a new seeding
algorithm by Richard Wagner. Identical seeds no longer produce the
same sequence of values they did in previous versions. This behavior
is not expected to change again, but it is considered unsafe to rely
upon it nonetheless.
所以你需要做的是使用 "bad old" srand 和 rand 函数。他们会产生你想要的结果。
我想补充一点:不要将这些函数(或 mt_rand 就此而言)用于任何与安全相关的事情 as stated here。
如果您需要每日 ID,我想到的最简单的方法是:
$today_code = substr( date("D") , 0,1) . substr( date("j") * date("Y") , 0, $your_desidered_lenght = 2);
这将生成一个格式为 = A12 的 ID,其中 "A" 是星期的第一个字母,“12”是将为当天的整个日期生成的整数。此技术 ID 是:
- 作为代码,易于阅读
- 作为输出,以某种方式可读。你一定可以知道是星期几创建的。
- 自定义简单灵活
我想通过找到 post 的 ID 来显示当天的报价,所以我使用种子作为最低和最高 ID,所以每天我都会得到一个随机 ID,这个每天将随机显示一个 post。 我每天都用它来生成相同的随机数:
mt_srand(crc32(date('D d F Y')));
echo $random = (mt_rand(1,8288));
这在 php 版本 5.3 或更低版本上完美运行,但在我的其他服务器之一,即版本 5.4.33 上。它不起作用,每次总是创建一个新的。我已经更改了 php 版本来测试它,似乎是影响它的版本。 还有其他方法可以每天生成一个 'consistent random' 号码吗?我需要一个数字,以便我可以查询数据库并每天显示特定的 post。
我不想创建另一个 table 或添加另一行来为每个 post 添加日期,因为这意味着我必须为每个 post 创建未来的日期并且已经有太多行无法执行此操作。
看一眼 PHP manual for mt_srand 就知道:
The Mersenne Twister implementation in PHP now uses a new seeding algorithm by Richard Wagner. Identical seeds no longer produce the same sequence of values they did in previous versions. This behavior is not expected to change again, but it is considered unsafe to rely upon it nonetheless.
所以你需要做的是使用 "bad old" srand 和 rand 函数。他们会产生你想要的结果。
我想补充一点:不要将这些函数(或 mt_rand 就此而言)用于任何与安全相关的事情 as stated here。
如果您需要每日 ID,我想到的最简单的方法是:
$today_code = substr( date("D") , 0,1) . substr( date("j") * date("Y") , 0, $your_desidered_lenght = 2);
这将生成一个格式为 = A12 的 ID,其中 "A" 是星期的第一个字母,“12”是将为当天的整个日期生成的整数。此技术 ID 是:
- 作为代码,易于阅读
- 作为输出,以某种方式可读。你一定可以知道是星期几创建的。
- 自定义简单灵活