我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MurmurHash Tips

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MurmurHash Tips

简介

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
>>> hex(mmh3.hash128('CN305183362S'))
'0xbc0c788989d22a81e455d4a6cb17fba4'

Java

  • 借用 BigInteger
import java.math.BigInteger;
import org.apache.commons.codec.digest.MurmurHash3;
import org.apache.commons.lang.ArrayUtils;
public class AppTester {
    public static void main(String[] args) {
        final byte[] origin = "CN305183362S".getBytes();
        long[] vec = 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
    }
}
  • 借用 ByteBuffer(好文推荐:Java 中 byte、byte 数组和 int、long 之间的转换)
import java.nio.ByteBuffer;
import org.apache.commons.codec.digest.MurmurHash3;
import org.apache.commons.lang.ArrayUtils;
public class AppTester {
    public static void main(String[] args) {
        final byte[] origin = "CN305183362S".getBytes();
        long[] vec = MurmurHash3.hash128(origin, 0, origin.length, 0);
        ByteBuffer buf0 = ByteBuffer.allocate(8); 
        ByteBuffer buf1 = ByteBuffer.allocate(8);         
        buf0.putLong(0, vec[0]);
        buf1.putLong(0, vec[1]);        
        byte[] array0 = buf0.putLong(0, vec[0]).array();
        byte[] array1 = buf1.putLong(0, vec[1]).array();        
        ArrayUtils.reverse(array0);    // 反转 byte[](大小端转换)
        ArrayUtils.reverse(array1);    // 反转 byte[](大小端转换)
        buf0.put(array0, 0, array0.length).flip();
        buf1.put(array1, 0, array1.length).flip();        
        String part0 = String.format("%x", buf0.getLong());
        String part1 = String.format("%x", buf1.getLong());
        System.out.println(part0 + part1);    // a4fb17cba6d455e4812ad28989780cbc
    }
}
  • 浅显易懂版,不用处理字节
import org.apache.commons.codec.digest.MurmurHash3;
public class AppTester {
    public static void main(String[] args) {
        final byte[] origin = "CN305183362S".getBytes();
        long[] vec = MurmurHash3.hash128(origin, 0, origin.length, 0);
        String part0 = String.format("%x", vec[0]);
        String part1 = String.format("%x", vec[1]);
        String line = "";
        // 反转前半段(大小端转换)
        for (int i = 0; i < 8; ++i) {
            line += part0.substring(14 - 2 * i, 16 - 2 * i);
        }
        // 反转后半段(大小端转换)
        for (int i = 0; i < 8; ++i) {
            line += part1.substring(14 - 2 * i, 16 - 2 * i);
        }
        System.out.println(line);    // a4fb17cba6d455e4812ad28989780cbc
    }
}

Node.js

  • MurmurHash3js
  • 在线测试: http://murmurhash.shorelabs.com/
var murmurHash3 = require("murmurhash3js");
let line = murmurHash3.x64.hash128("CN305183362S");
console.log(line);        // e455d4a6cb17fba4bc0c788989d22a81
let newLine = "";
// 反转前半段(大小端转换)
for (let i = 0; i < 8; ++i) {
    newLine += line.slice(14-2*i, 16-2*i);
}
// 反转后半段(大小端转换)
for (let i = 0; i < 8; ++i) {
    newLine += line.slice(30-2*i, 32-2*i);
}
console.log(newLine);    // a4fb17cba6d455e4812ad28989780cbc
本文出处 walker snapshot

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MurmurHash Tips

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MurmurHash Tips

简介MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。与其它流行的哈希函数相比,对于规律性较强的 key,MurmurHash 的随机分布特征表现更良好。家族成员MurmurHash1, MurmurHash2, Mu
2023-01-31

Python3 logging tips

官方文档:Logging HOWTO官方文档:logging.config 模块日志的等级(level)如下,只有大于等于配置的等级时,日志才会被记录。# 默认等级为 WARNINGNOTSET < DEBUG < INFO < WARNI
2023-01-31
2024-04-02

Python tips

0、Python Enhancement Proposal。(PEP,Python增强建议书)0.1、Python中的注释。0.2、Python之禅。(import this)0.3、Python Cookbook 3rd Edition
2023-01-31
2024-04-02

Windows tips小技巧

自从 Windows 2000? 以及 Active Directory(Microsoft Windows? 2000 操作系统的目录服务)面世以来,在与 Microsoft 合作伙伴交往的亲身经历中 ,我积累了许多这样的窍门,并已收集了
2023-05-25

Windows Phone 7 Tips

1. Windows Phone 7是一个多任务的操作系统,但是只允许唯一一个第三方应用程序在前台运行2. 启动器和选择器为应用程序提供间接访问手机内置功能的方法。一些内置的启动器:EmailComposeTask、MarketplaceD
2023-01-31

TIPS FOR C++3

[1]Define operators primarily to mimic conventional usage;[2]For large operands,use const reference argument types;[3]Fo
2023-01-31

Sql server注入一些tips

sql server环境测试:几个特性:1.sql server兼容性可以说是最差的。举例:select x from y where id=1字符串查询select x from y where id=‘1‘这是会报错的,不允许的select x from

	Sql server注入一些tips
2017-02-25

FFMPEG Tips (3) 如何读取

本文是我的《FFMPEG Tips》系列的第三篇文章,上篇文章 介绍了如何提取整个音视频码流的媒体信息,包括:封装格式、编码格式、视频的分辨率、帧率、码率、音频的采样率、位宽、通道数等等,而本文则关注得更细一点,看看如何利用 ffmpeg
2023-01-31

新鲜出炉的js tips提示效果

提示不难做,那个三角号样式很难调兼容,死了好多脑细胞预览主窗口提示错位,保存本地测比较好。
2022-11-21

教你如何在Cocos2D-X游戏中轻松实现tips功能

编程学习网:在游戏开发中我们有时需要在Cocos2D-X中使用tips功能,本篇教程将教你如何在Cocos2D-X中轻松实现tips功能。
教你如何在Cocos2D-X游戏中轻松实现tips功能
2024-04-23

分享下好用的视频加密软件挑选小Tips

对于使用者来说如何选到好用的视频加密软件,是一件很费精力的事情。比如去bai度浏览器搜索“好用的视频加密软件”,会出来23,000,000个结果,从这些海量信息中筛选出有用的,在做测测试,也是需要消耗不少的精力和时间,也不现实。那有什么方法
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录