Javascript 采用DJB Time33算法将长字符串转换为数字

阅读(4369)

将字符串转换为数字,例如将url地址转换为数字后,用作对象的key,可以减少key的长度:

function genHash (str){
    var hash = 5381;
    str = str || '';

    for(var i=0, len=str.length; i<len; ++i){
        hash += (hash << 5) + str.charAt(i).charCodeAt();
    }

    return hash & 0x7fffffff;
}

基于 Time33 的哈希函数,又叫 DJBX33A 算法(Daniel J. Bernstein, Times 33 with Addition),其实现就是不断的乘以33。
PHP、Apache、Perl 采用此算法。