字母数字 ID 应保证其唯一性的最小字节数是多少?

What is the minimum number of bytes that an alphanumeric id should have to guarantee its uniqueness?

假设我想为数据库中的每个用户生成一个字母数字 ID,代码如下:

$bytes = random_bytes($length);
$identifier = bin2hex($bytes);

参数 $length 是否应该有一个最小值以保证为每个用户生成的标识符的唯一性?

这取决于您需要唯一值还是不可猜测的值。

唯一标识符

如果需要每个用户的唯一值,可以使用UUID,例如Mysql有UUID,微软SQL有Unique Idenfifier(基本相同),即正在使用数据库。或者只使用自动递增选项/ID 选项。 PHP 有方法 php.net uniqid Or you can try to create your own rfc 4122

不容易猜到

基本上是你的问题。您还可以使用 openssl random 函数或 pseudo-random 数字生成器的一些其他变体。据我所知,您无法保证生成的值的唯一性。但是,您可以通过将组合的数量设置得相当高并希望最好的结果来尝试降低这种冲突的可能性。

第三个选项

Unique non-repeating random numbers 个关于如何生成它们的线程,但我不认为它们比你的 do-while 循环检查有效性的问题更适合你使用。