我正在尝试创建一个随机的唯一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之前注册, 但每个用户仍然必须拥有 独特的“前身”。
答案 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