在 php 中创建具有 base_convert 且长度有限的唯一字符串

create unique string in php with base_convert and limited length

我需要一个最大长度为 6 且混合了数字和字母的字符串。我检查了:

How can I make short random unique keys, like YouTube video IDs, in PHP?

PHP generate a unique string

这非常有用,但他们生成长度为 10 - 12 的字符串。我的问题是这段代码的输出是否始终唯一?

base_convert(microtime(false), 6, 36);

base_convert(uniqid('test',true), 6, 36);

注意:我从 6 进制转换,但输入显然不是 6 进制。我这样做是因为如果从 10 转换为 36,它会生成 10-12 长度.

简短回答:不,但是如果你做的是个人网站之类的小东西,或者很少有人使用的内部工具,那就没问题了。

长答案:如果你想做一些安全的事情,或者使用共享数据库的多台服务器,那绝对不是。如果您依赖 microtime,攻击者可以计算出他们的请求到达您的服务器所需的确切时间,并用他们的请求轰炸它,直到您的服务器生成重复的 ID。 uniqid 函数不保证 return uniq 值(直接来自 php 手册),如果您使用 NTP 更新时间并且它会将您的时间调整到 5 秒前,肯定会生成重复的 ID。