【发布时间】:2018-05-16 01:02:07
【问题描述】:
我需要生成可以在文件名中使用的唯一标识符,并且可以在给定相同输入值的情况下重现。我需要生成数百万个这样的标识符,因为源输入有数百万个组合。
为简单起见,我将在示例中使用一个小集合,但实际集合可能相当大(数百甚至数千个项目);大于可以手动编码为文件名的大小。
我注意到5th method of generating UUID's 允许您提供字符串输入。
> input_set = {'apple', 'banana', 'orange'}
> uuid.uuid5(uuid.NAMESPACE_URL, pickle.dumps(input_set)).hex
'f39926529ad45997984643816c1bc403'
文档说它在后台使用SHA1。发生碰撞的风险是否太高?有没有更好的方法来可靠地散列唯一标识符?
【问题讨论】:
-
这是一个解决 UUID 冲突问题的资源:@987654322@
-
感谢@blurp,尽管它只处理生成 UUID 的版本 1 和 2。我正在寻找使用从输入字符串和命名空间标识符生成它们的版本 5。
-
维基百科文章专门讨论了与版本 3、4 和 5 发生冲突的可能性。
-
谢谢@blurp,看来概率很小;不过,我会留下这个问题,因为我仍然有兴趣看看是否有更好、更规范的方法来做到这一点。
-
您的输入值有哪些示例?如果唯一性完全由输入值决定,有什么理由不能使用输入值本身?