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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM