简介

MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。

家族成员

MurmurHash1, MurmurHash2, MurmurHash3

计算 mmh3 十六进制字符串

Python3

>>> import binascii>>> import mmh3>>> binascii.b2a_hex(mmh3.hash_bytes('CN305183362S')).decode('utf8')'a4fb17cba6d455e4812ad28989780cbc'    # 32个字符,128 bit

Java

import java.math.BigInteger;import org.apache.commons.lang.ArrayUtils;public class AppTester {    public static void main(String[] args) {        final byte[] origin = "CN305183362S".getBytes();        long[] vec = org.apache.commons.codec.digest.MurmurHash3.hash128(origin, 0, origin.length, 0);        // 将 long 转换为 BigInteger        BigInteger bigInteger0 = BigInteger.valueOf(vec[0]);        BigInteger bigInteger1 = BigInteger.valueOf(vec[1]);        // 将 BigInteger 转换为 byte[]        byte[] array0 = bigInteger0.toByteArray();        byte[] array1 = bigInteger1.toByteArray();        // 翻转 byte[]        ArrayUtils.reverse(array0);        ArrayUtils.reverse(array1);                // 将 byte[] 转换为无符号整数,并转为十六进制字符串        String part0 = (new BigInteger(1, array0)).toString(16);        String part1 = (new BigInteger(1, array1)).toString(16);        System.out.println(part0 + part1);    // a4fb17cba6d455e4812ad28989780cbc    }}
本文出处 walker snapshot