从Python中的字符串生成ID

mle*_*108 4 python hash

我正在努力integerstringPython 生成给定类型的ID 。

我认为内置hash功能是完美的,但有时ID似乎太长。这是一个问题,因为最大长度限制为64位。

到目前为止,我的代码:hash(s) % 10000000000。我可以预期的输入字符串的长度将在12-512个字符之间。

要求是:

  • 仅整数
  • 从提供的字符串生成
  • 理想情况下,最长为10-12个字符(我将只有500万个项目)
  • 碰撞几率低..?

如果有人可以提供任何提示/解决方案,我将非常高兴。

Ste*_*lla 6

我会做这样的事情:

>>> import hashlib
>>> m = hashlib.md5()
>>> m.update("some string")
>>> str(int(m.hexdigest(), 16))[0:12]
'120665287271'
Run Code Online (Sandbox Code Playgroud)

这个想法:

  1. 用十六进制形式的MD5(或SHA-1或...)计算字符串的哈希(请参见hashlib模块)
  2. 将字符串转换为整数,然后将其转换为以10为底的字符串(结果中只有数字)
  3. 使用字符串的前12个字符。

如果字符a-f也可以,我会做m.hexdigest()[0:12]