使用PHP生成随机唯一ID

时间:2014-04-12 15:28:28

标签: php sql random unique

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

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

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

6 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:5)

您可以使用PHP的uniqid功能。它不是随机的(它基于服务器的时钟),但除非你有两个人在相同的最小部分时间内注册,否则它将保证是唯一的并且它是&#39 ; s非顺序。

答案 2 :(得分:1)

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

如果你真的希望它是随机的,你可以使用PHP的rand函数:http://www.php.net/manual/en/function.rand.php

答案 3 :(得分:1)

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();
 }

答案 4 :(得分:0)

PHP Doc

  

警告此功能不会生成加密安全的密码   值,并且不得用于加密目的。如果你需要   密码安全的值,请考虑使用random_int(),   random_bytes()或openssl_random_pseudo_bytes()代替。

     

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

 uniqid ([ string $prefix = "" [, bool $more_entropy = FALSE ]] ) :
 string

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

 $unique = uniqid (rand(), true);

别忘了我们只是在增加拥有唯一ID的可能性。

唯一性可能是99.99%。

答案 5 :(得分:-1)

使用php你可以这样做。

$pattern = "1234567890";
$ID = $pattern{rand(0,10)};
for($i = 1; $i < 7; $i++)
{
    $ID .= $pattern{rand(0,10)};
}