简单的哈希函数(从字符串输入输出1个字节)

时间:2009-12-28 17:29:34

标签: java javascript xslt hash

我正在寻找一个简单的哈希算法,它会为字符串输入提供一个字节的输出(输入将是RFC822电子邮件地址,如果有帮助的话)。

我希望它简单,快速,并放大输入差异(因此两个相似的地址有不同的输出)。 (是的,我在输出的一个字节中要求很多。)

理想情况下,我想要一个XSL答案,但我可以用Java或Javascript(然后将散列作为参数传递给XSL处理器)。

感谢。

4 个答案:

答案 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)

我的建议是简单地对字符串中的所有字节进行异或。每个字节的每一位都会影响最终结果,任何单位错误肯定会导致散列不同。

非常简单,非常快。考虑到结果位数较少,可能与其他任何解决方案一样好。