【问题标题】:Probability with collision on uuid sliceuuid 切片上发生碰撞的概率
【发布时间】:2015-03-31 17:35:59
【问题描述】:

我想为我的用户提供一个长度为 10 位且随机的唯一 ID。我之前使用的是:

user.guid = str(uuid.uuid4()).replace('-','')
'5d2f251a32ed437689e7d66575aee09f'

不过,我还想让“输入”变得更容易一些,因为有些地方需要输入。我正在考虑这样做:

>>> str(uuid.uuid4()).replace('-','')[:10].upper()
'AA6560AB32'

发生碰撞的可能性有多大?有没有更好的方法来保证唯一性(不存储以前添加的 ID)?

【问题讨论】:

标签: python


【解决方案1】:

UUID 字符串中的字母abcdef 是十六进制数字。因此,您可以毫无问题地将它们更改为大写。

UUID 是一个保证唯一的 128 位数字。如果将其截断为 40 位(十个十六进制数字),则不再保证其唯一性。如果区分您的用户很重要,您可能应该在生成这些 40 位数字之后再将它们分配给用户之前进行冲突测试。

【讨论】:

  • 这是错误的,UUID 不能保证是唯一的,它实际上是唯一的,即太阳会在你再次生成相同的 UUID 之前被烧毁,但它肯定会发生。
猜你喜欢
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多