如何将yyyyMMddHHmmss格式的日期减少到5个字节?

时间:2011-08-22 09:36:05

标签: hash

我需要生成一个后缀来统一值。我想过使用当前的数据和时间,但后缀需要不超过5个字节。是否有任何散列方法可以从yyyyMMddHHmmss格式的日期产生5个字节或更少的哈希值?

还有其他想法吗?保持一个运行的计数器并使用下一个值很简单,但我宁愿不必依赖任何存储的值。

1 个答案:

答案 0 :(得分:3)

如果您不需要依赖可打印字符,我建议您只使用Unix timestamp。即使有4个字节(直到2038年1月19日),这也会很有效。

如果您只想使用一部分字符,我建议您创建一个要使用的值列表。

  • 假设您要使用字母(大写和小写)和数字 - > 62个值。
  • 现在你需要convert the timestamp into base-62。假设你的时间戳是100:
  • 100 =( 1 * 62 ^ 1)+( 38 * 62 ^ 0)
  • 如果您已将可打印值存储在数组中,则可以使用系数 1 38 作为该数组的索引。

如果您选择基数为小,则五个字节是不够的。在这种情况下,您可以从时间戳中减去一个常量(这将花费您一些时间),或者您可以估计何时会出现重复的时间戳以及该日期是否超过您的退休日期; - )