我有一张看起来像这样的桌子。这是用户在我的网站上注册时的一些常规信息。
+------------+------------+
| user_id | username |
| 312543 | Bobby |
| 543765 | Victoria |
+------------+------------+
我只是想知道,你如何为user_id
生成一个随机的唯一数字?假设数据库中尚未包含1到100之间的数字。我想用PHP而不是SQL来实现这一点。
改善Niet the Dark Absol的答案:你可以使用uniqid(rand())
。 uniqid()
将根据您服务器的内部时钟生成一个数字,rand()
将在其前面加上一个随机数。因此,即使两个用户在相同的最小部分中注册,rand()
前缀也会为它们分配不同的前缀,概率超过99.99999%。
你可以使用PHP的uniqid
函数。它不是随机的(它基于服务器的时钟),但除非你有两个人在相同的最小部分中注册,否则它将保证是唯一的并且它是非顺序的。
首先,我同意@Shankar Damodaran,使用AUTO_INCREMENT
而不是随机ID要好得多,因为如果你开始使用随机ID,那么你可能必须首先检查该随机ID是否已经存在,然后选择另一个随机ID并再次检查,直到你最终得到一个独特的。
如果你真的希望它是随机的,你可以使用PHP qazxsw poi函数:qazxsw poi
rand
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%的唯一性。
用php你可以这样做。
uniqid ([ string $prefix = "" [, bool $more_entropy = FALSE ]] ) :
string