djb2函数中发生冲突的可能性是什么



我正在尝试使用djb2哈希函数为类似的字符串生成唯一id

"114.143.227.82Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0"

使用以下javascript中给出的这种算法发生冲突的可能性有多大。

String.prototype.hashCode = function(){ var hash = 5381; if (this.length === 0) return hash; for (var i = 0; i < this.length; i++) { var character = this.charCodeAt(i); hash = (( hash << 5 ) + hash ) ^ character; } return hash; }

用法:

var hash = new String("114.143.227.82"+navigator.userAgent).hashCode();

alert(hash);

参考:

http://www.cse.yorku.ca/~oz/hash.html

对于上面的字符串,我得到-ve的整数值。如何为这些类型的字符串返回+ve整数?

我在修改了上面的代码后得到了解决方案。

String.prototype.hashCode = function(){ var hash = 5381; if (this.length === 0) return hash; for (var i = 0; i < this.length; i++) { var character = this.charCodeAt(i);
hash = hash * 33 ^character; } return hash >>>0; }

最新更新