Hash 如何将YYYYMMDDHMMSS格式的日期减少到5字节?

Hash 如何将YYYYMMDDHMMSS格式的日期减少到5字节?,hash,Hash,我需要生成一个后缀来uniquify一个值。我想使用当前的数据和时间,但需要后缀长度不超过5字节。是否有任何哈希方法可以从yyyyMMddHHmmss格式的日期生成5字节或更少的哈希 还有其他想法吗?维护一个运行的计数器并使用下一个值是很简单的,但我不希望依赖任何类型的存储值。如果您不需要依赖可打印字符,我建议您只需使用。即使使用4个字节(直到2038年1月19日),这也将非常有效 如果您只想使用字符的子集,我建议您创建一个要使用的值列表 假设您想使用字母(大写和小写)和数字->62值 现在你

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


还有其他想法吗?维护一个运行的计数器并使用下一个值是很简单的,但我不希望依赖任何类型的存储值。

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

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

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

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

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

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

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

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

你的约会范围是什么?当然,最明显的是,这也取决于散列的编码要求。你的日期范围是多少?当然,最明显的是,这也取决于散列的编码要求。只想补充一点:如果您不需要使用1970年之前的时间,但希望避免使用1970年之前的时间,那么您可以使用32位/4字节的UNIX时间戳进行存储,前提是您确保它始终被视为无符号值。这将把问题推迟到2106年。这是完美的。我发现了一个很好的类,它在中进行转换,而不是使用Unix时间,我在编写代码的那天午夜使用它作为源代码,扩展可用范围。只想添加:如果您不需要使用1970年之前的时间,但希望避免使用,则可以使用32位/4字节UNIX时间戳进行存储,前提是您确保它始终被视为无符号值。这将把问题推迟到2106年。这是完美的。我发现了一个很好的类,它在中进行转换,而不是使用Unix时间,我在编写代码的那天午夜使用它作为源代码,扩展了可用范围。