PHP 的 random_int 是否可以依赖于唯一的整数生成器(合理地)
Can PHP's random_int be relied for unique integer genrator (reasonably)
我有一个应用程序,每年需要生成大约 20 万个批次 ID。
我首先想到使用 uniqid()
来生成批次 ID,但是这将 return 是字符串,与整数相比,它将在数据库中占用巨大的 space。
因此,我的问题是,是否可以依靠 random_int(1, 2147483647)
来生成唯一编号?
仅供参考,通常 2147483647
是 PHP_INT_MAX
。
正如@Alex Howansky 所提到的,如果您使用 uniquid()
,数据库大小几乎不会增加。
如果您的要求接近 100% 唯一 ID,那么 random
4 位整数将不是唯一的。它将需要一些额外的位来随机和唯一。
我在我的应用程序中使用了以下函数。这具有更高的唯一性概率。 uniquid()
它使用 22 个字节而不是 13 个字节
function getUniqueId(){
// will return 22 characters Unique string eg "5bcc2342652c2630171474"
return str_replace('.', '', uniqid('',true));
}
如果您仍然需要只使用整数。然后,正如 Lawrence Cherone 所建议的那样,您应该使用自动增量。
我有一个应用程序,每年需要生成大约 20 万个批次 ID。
我首先想到使用 uniqid()
来生成批次 ID,但是这将 return 是字符串,与整数相比,它将在数据库中占用巨大的 space。
因此,我的问题是,是否可以依靠 random_int(1, 2147483647)
来生成唯一编号?
仅供参考,通常 2147483647
是 PHP_INT_MAX
。
正如@Alex Howansky 所提到的,如果您使用 uniquid()
,数据库大小几乎不会增加。
如果您的要求接近 100% 唯一 ID,那么 random
4 位整数将不是唯一的。它将需要一些额外的位来随机和唯一。
我在我的应用程序中使用了以下函数。这具有更高的唯一性概率。 uniquid()
function getUniqueId(){
// will return 22 characters Unique string eg "5bcc2342652c2630171474"
return str_replace('.', '', uniqid('',true));
}
如果您仍然需要只使用整数。然后,正如 Lawrence Cherone 所建议的那样,您应该使用自动增量。