128位整数散列函数

时间:2013-07-22 08:14:13

标签: python mysql hash bigint

查找字符串到整数散列函数,其值在mysql bigint unsigned数据类型(0 <= n <= 18446744073709551615)的范围内。将md5 / sha1转换为基数为16的整数不符合此要求。

1 个答案:

答案 0 :(得分:0)

Java使用适合您的rolling hash

来自java.lang.String

public int hashCode() {
    int h = hash;
    if (h == 0 && count > 0) {
        int off = offset;
        char val[] = value;
        int len = count;

        for (int i = 0; i < len; i++) {
            h = 31*h + val[off++];
        }
        hash = h;
    }
    return h;
}

我们的想法是将哈希值计算为:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

要处理溢出,您可以添加针对18446744073709551615检查哈希的步骤,如果更大,请使用哈希的mod18446744073709551615