【问题标题】:mt_rand max valuemt_rand 最大值
【发布时间】:2012-07-05 09:51:43
【问题描述】:

在 php 文档中,我发现了这个注释:

在 32 位和 64 位系统(OS X 和 Linux)上,mt_getrandmax() 返回 2147483647

我已经使用提供的简单功能确认了这一点

function gethighest()
{
return mt_getrandmax();
}
$hello = gethighest();
echo '<b>'.$hello.'</b>';

我正在使用这个 sn-p 来生成一个唯一的 id

$number = mt_rand(163245,978534);
$unique_id = crypt($number);
echo md5($unique_id).'<br/>';

我的问题是,mt_rand 的最大值是什么意思?一旦达到最大值,id 会开始重复吗?

【问题讨论】:

  • 你这样做只是为了生成一个唯一的 id 吗?必须是数字吗?
  • 为什么要使用两种不同的散列算法(crypt()md5())来获取散列密钥?我建议一个就足够了。您还可以使用sha1(),它会为您提供一个包含任何输入的 40 字符的十六进制字符串……

标签: php unique-id


【解决方案1】:

您的代码:

$number = mt_rand(163245,978534); 

表示生成的数字将介于这两个数字之间,它会在您运行它的多次,生成这两个值之间的数字。没有返回值超出该范围。但是,是的,值可以重复..

例如用 mt_rand(1,5) 尝试它并告诉它执行 20 次并输出。

【讨论】:

    【解决方案2】:

    【讨论】:

    • unique id 函数与 mt_rand 函数相比有什么优势?
    • 你做的工作更少,它保证返回一个唯一的 id。需要更多?
    【解决方案3】:

    如果您打算生成唯一 ID,则应使用 uniqid

    $unique_id = uniqid(microtime(true));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 2011-07-26
      • 2015-04-07
      • 1970-01-01
      相关资源
      最近更新 更多