在Python中从字符串生成ID

时间:2014-04-09 21:41:57

标签: python hash

我在Python中为给定的integer生成string类型的ID而苦苦挣扎。

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

到目前为止我的代码:hash(s) % 10000000000。 我可以期待的输入字符串将在12-512个字符长的范围内。

要求是:

  • 仅限整数
  • 从提供的字符串生成
  • 理想情况下长达10-12个字符(我只有约500万个字符)
  • 碰撞概率低......?

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

2 个答案:

答案 0 :(得分:5)

我会做这样的事情:

>>> 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个字符。
  4. 如果字符a-f也可以,我会m.hexdigest()[0:12]

答案 1 :(得分:0)

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

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

NB:

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