我正在寻找一个简单的哈希算法,它会为字符串输入提供一个字节的输出(输入将是RFC822电子邮件地址,如果有帮助的话)。
我希望它简单,快速,并放大输入差异(因此两个相似的地址有不同的输出)。 (是的,我是在输出的一个字节中要求很多。)
理想情况下,我想要一个XSL答案,但我可以用Java或Javascript(然后将散列作为参数传递给XSL处理器)。
感谢。
答案 0 :(得分:2)
每个哈希函数都有其优点和缺点,快速且易于计算的哈希函数往往对某些类别的数据表现不佳。试验和错误需要成为任何解决方案的一部分。除了其他建议之外,您可以尝试使用整数乘法作为散列函数的一部分,例如
hash = 0
for (int i=0; i<data.length; i++)
hash = ((37 * hash) + data[i]) & 0xff;
答案 1 :(得分:1)
使用CRC-8,它有9位信息,然后在任一端掉一点并称之为一天。否则使用任何其他常见的CRC算法。
答案 2 :(得分:1)
为什么不采用标准字符串hashCode()
函数的最高/最低有效字节?
答案 3 :(得分:1)
我的建议是简单地对字符串中的所有字节进行异或。每个字节的每一位都会影响最终结果,任何单位错误肯定会导致散列不同。
非常简单,非常快。考虑到结果位数较少,可能与其他任何解决方案一样好。