zoukankan      html  css  js  c++  java
  • js 字符串哈希函数

    废话不多说直接上代码

    /**
     * 获取字符串的哈希值
     * @param {String} str
     * @param {Boolean} caseSensitive
     * @return {Number} hashCode
     */
    getHashCode:function(str,caseSensitive){
        if(!caseSensitive){
            str = str.toLowerCase();
        }
        // 1315423911=b'1001110011001111100011010100111'
        var hash  =   1315423911,i,ch;
        for (i = str.length - 1; i >= 0; i--) {
            ch = str.charCodeAt(i);
            hash ^= ((hash << 5) + ch + (hash >> 2));
        }
         
        return  (hash & 0x7FFFFFFF);
    }
    
    简单讲讲过程

    首先由一个初始化的hash值,这个函数会对字符串中的每个字符进行运算
    返回就是一个长数字

    每次的运算过程

    在每次的运算中都会对hash值进行操作,每次都是hash值先位运算右移5得到到a,然后hash值位运算左移2得到b,然后加上a+b+c(循环中的单个字符的asc编码)得到d,最后运算d^hash值赋值给hash值。
    所以每次循环都会得到不同的hash值,下次运算的时候就会使用到这一次运算得到的hash。

  • 相关阅读:
    htm与html的区别
    CLR笔记:3.共享程序集合强命名程序集
    CLR笔记:5.基元,引用和值类型
    CLR笔记:13.数组
    CLR笔记:18.可空值类型
    正则表达式
    代码大全
    wcf的部署
    Json相关
    $.ready和onload
  • 原文地址:https://www.cnblogs.com/Silababy/p/5226886.html
Copyright © 2011-2022 走看看