从Python中的字符串生成ID

问题描述 投票:6回答:2

我很努力地为Python中给定的integer生成类型为string的ID。

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

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

要求是:

  • 仅限整数
  • 根据提供的字符串生成
  • 最理想的是最多10到12个字符(我只能拥有约500万个字符)
  • 低碰撞可能性..

[如果有人可以提供任何提示/解决方案,我会很高兴。

python hash
2个回答
6
投票

我会做这样的事情:

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

想法:

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

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


0
投票

如果不允许您添加额外的依赖项,则可以通过以下方式继续使用hash函数:

>>> my_string = "whatever"
>>> str(hash(my_string))[1:13]
'460440266319'

NB:

  • 我忽略第一个字符,因为它可能是负号。
  • hash可能为同一字符串返回不同的值,因为PYTHONHASHSEED值将在每次运行程序时更改。您可能需要将其设置为某个固定值。 Read here
© www.soinside.com 2019 - 2024. All rights reserved.