使用PHP生成随机唯一ID

问题描述 投票:3回答:6

我有一张看起来像这样的桌子。这是用户在我的网站上注册时的一些常规信息。

+------------+------------+
|   user_id  | username   |
|   312543   |   Bobby    |
|   543765   |  Victoria  |
+------------+------------+

我只是想知道,你如何为user_id生成一个随机的唯一数字?假设数据库中尚未包含1到100之间的数字。我想用PHP而不是SQL来实现这一点。

php sql random unique
6个回答
11
投票

改善Niet the Dark Absol的答案:你可以使用uniqid(rand())uniqid()将根据您服务器的内部时钟生成一个数字,rand()将在其前面加上一个随机数。因此,即使两个用户在相同的最小部分中注册,rand()前缀也会为它们分配不同的前缀,概率超过99.99999%。


5
投票

你可以使用PHP的uniqid函数。它不是随机的(它基于服务器的时钟),但除非你有两个人在相同的最小部分中注册,否则它将保证是唯一的并且它是非顺序的。


1
投票

首先,我同意@Shankar Damodaran,使用AUTO_INCREMENT而不是随机ID要好得多,因为如果你开始使用随机ID,那么你可能必须首先检查该随机ID是否已经存在,然后选择另一个随机ID并再次检查,直到你最终得到一个独特的。

如果你真的希望它是随机的,你可以使用PHP qazxsw poi函数:qazxsw poi


1
投票
rand

0
投票

http://www.php.net/manual/en/function.rand.php

注意此函数不会生成加密安全值,也不应用于加密目的。如果需要加密安全值,请考虑使用random_int(),random_bytes()或openssl_random_pseudo_bytes()。

警告此功能不保证返回值的唯一性。由于大多数系统通过NTP等调整系统时钟,因此系统时间会不断变化。因此,该函数可能不返回进程/线程的唯一ID。使用more_entropy来增加唯一性的可能性。

function isUnique($var)
{
//we check here if var is unique, return TRUE on unique FALSE on non unique.
}

    //this is my function for generating random strings(can be used for numbers)
function _generateRandomString() {
    $chars = array_merge(range('a', 'z'), range(0, 9));
    shuffle($chars);
    return implode(array_slice($chars, 0,25));
}

  //actual code: 
$string= _generateRandomString();
while(!isUnique($string)) //if string is unique, while loop stops.
 {
 $string= _generateRandomString();
 }

换句话说,如果您的脚本使用并行进程运行,则您可能会拥有相同的唯一ID。所以我可以告诉你,没有办法拥有100%的唯一id,但我们可以像使用其他函数一样增加概率:rand和more_entropy(uniqid的第二个参数)

PHP Doc

不要忘记我们只增加了拥有唯一身份证的可能性。

可能是99.99%的唯一性。


-1
投票

用php你可以这样做。

 uniqid ([ string $prefix = "" [, bool $more_entropy = FALSE ]] ) :
 string
© www.soinside.com 2019 - 2024. All rights reserved.