console
function stringToBytes ( str ) {
var ch, st, re = [];
for (var i = 0; i < str.length; i++ ) {
ch = str.charCodeAt(i);
st = [];
do {
st.push( ch & 0xFF );
ch = ch >> 8;
}
while ( ch );
re = re.concat( st.reverse() );
}
return re;
}
function multiply(m, n) {
return Number(BigInt(m) * BigInt(n) & BigInt(0xffffffff));
}
function murmurhash(str, seed = 0) {
let fl = 0xffffffff
let data = stringToBytes(str);
let len = data.length;
let m = 0x5bd1e995 & fl;
let r = 24;
let h = seed ^ len & fl;
let len_4 = len >> 2 & fl;
let i;
let len_m;
let left;
for(i = 0; i < len_4; i++) {
let i_4 = i << 2 & fl;
let k = data[i_4 + 3] & fl;
k = k << 8 & fl;
k = k | (data[i_4 + 2] & 0xff) & fl;
k = k << 8 & fl;
k = k | (data[i_4 + 1] & 0xff) & fl;
k = k << 8 & fl;
k = k | (data[i_4 + 0] & 0xff) & fl;
k = multiply(k, m);
k = k ^ (k >> r) & fl;
k = multiply(k, m);
h = multiply(h, m);
h = h ^ k & fl;
}
console.log("into..." + h)
// avoid calculating modulo
len_m = len_4 << 2 & fl;
left = len - len_m;
console.log(left)
if (left != 0) {
if (left >= 3) {
h ^= data[len - 3] << 16;
}
if (left >= 2) {
h ^= data[len - 2] << 8;
}
if (left >= 1) {
h ^= data[len - 1];
}
h *= m;
}
h = h ^ (h >> 13) & fl;
h = h * m & fl;
h = h ^ (h >> 15) & fl;
console.log(str, data, len, seed, h)
return h;
}
const hash = murmurhash("jd_6be4dd91dd4ca", 0)
console.log(hash)
<script src="https://cdn.bootcdn.net/ajax/libs/murmurhash3js/3.0.1/murmurHash3js.js"></script>