使用base_convert和有限长度在php中创建唯一字符串

时间:2017-02-06 15:45:00

标签: php string unique microtime

我需要一个长度最大为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长度。

1 个答案:

答案 0 :(得分:1)

简答:不,但如果您正在做一些像个人网站这样的小事,或者只有极少数人使用的内部工具,那就没关系。

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