首页 > 解决方案 > 从字符串生成 0 到 1 之间的确定性哈希数

问题描述

我正在寻找一种在 JavaScript 中“散列”字符串的方法,这样

例如:

decimalHash('hallo world') = 0.145     // some made up number
decimalHash('how are you?') = 0.345    // some made up number
decimalHash('fine, thanks!') = 0.945   // some made up number

我已经搜索过这样的方法,但是到目前为止我发现的所有哈希函数都有不同的特征。任何帮助,将不胜感激!

标签: javascripthashhashcode

解决方案


您可以通过对每个带有一个因子的字符使用一个值并将这个值相加来构建一个自己的值。最后只取小数部分。

这种方法可能会产生冲突。

const decimalHash = string => {
    let sum = 0;
    for (let i = 0; i < string.length; i++)
        sum += (i + 1) * string.codePointAt(i) / (1 << 8)
    return sum % 1;
}

console.log(decimalHash('a'));
console.log(decimalHash('aa'));
console.log(decimalHash('hallo world'));
console.log(decimalHash('how are you?'));
console.log(decimalHash('fine, thanks!'));


推荐阅读