我有一张看起来像这样的桌子。这是用户在我的网站上注册时的一些一般信息。
+------------+------------+
| user_id | username |
| 312543 | Bobby |
| 543765 | Victoria |
+------------+------------+
我只是想知道,你如何为user_id
生成一个随机的唯一号码?假设数据库中尚未包含1到100之间的数字。我想用PHP完成这个,而不是SQL。
答案 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)
警告此功能不会生成加密安全的密码 值,并且不得用于加密目的。如果你需要 密码安全的值,请考虑使用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)};
}