此代码是否保证唯一ID

时间:2011-02-09 07:29:07

标签: php guid

我正在尝试创建一个随机的唯一ID。建议使用这个解决方案,但如果能保证它们是唯一的,我就不会这样做。

function uid($n) {
    $id_part = base_convert($n, 10, 36);
    $rand_part = str_shuffle('abcdefghijklmnopqrstuvwxyz0123456789');
    return sprintf("%05s%.15s", $id_part, $rand_part);
}

代码使用数据库自​​动递增id中的唯一id(我猜的是$ n输入),然后添加一些填充字符。它假设一个“独特的”5个字符基础-36主要id + 15个垃圾字符。有人可以确认结果是否确实是唯一的ID。

  

要回答这个问题,我是什么   完全这样做。我需要付出   用户唯一的ID,但没有   直接等于他们的用户ID   数据库。这样用户1就没有   知道他在用户2之前注册,   但每个用户仍然必须拥有   独特的“前身”。

3 个答案:

答案 0 :(得分:2)

$n来自的表格中它是唯一的,就像$n一样,没有任何额外的随机字符。它不会在所有应用程序中全局唯一,也不会是任何固定长度的字符串。您可以保证的是两次生成相同字符串的概率。

答案 1 :(得分:0)

您可以尝试内置功能,例如:

http://php.net/manual/en/function.uniqid.php

http://php.net/manual/en/function.com-create-guid.php

取决于您想拥有多少独特性。如果它仅适用于您的应用程序,或全局。

全球Guid将是一个更好的选择。

答案 2 :(得分:0)

$token = hash('sha256', rand() . microtime() . $_SERVER['REMOTE_ADDR']) // rand as possible