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。

posted @ 2016-02-29 11:24  Silababy  阅读(6103)  评论(0编辑  收藏  举报