Javascript 如何编辑此JS代码,以便在散列文本中添加字符,而不仅仅是数字

Javascript 如何编辑此JS代码,以便在散列文本中添加字符,而不仅仅是数字,javascript,Javascript,我使用这段代码是为了避免md5,因为它是一个大函数 String.prototype.hashCode = function() { var hash = 0, i, chr, len; if (this.length == 0) return hash; for (i = 0, len = this.length; i < len; i++) { chr = this.charCodeAt(i); hash = ((hash << 5) -

我使用这段代码是为了避免md5,因为它是一个大函数

String.prototype.hashCode = function() {
  var hash = 0, i, chr, len;
  if (this.length == 0) return hash;
  for (i = 0, len = this.length; i < len; i++) {
    chr   = this.charCodeAt(i);
    hash  = ((hash << 5) - hash) + chr;
    hash |= 0; // Convert to 32bit integer
  }
  return hash;
};
String.prototype.hashCode=function(){
var hash=0,i,chr,len;
如果(this.length==0)返回哈希;
for(i=0,len=this.length;ihash=((hash在我的头顶上你可以用这样的东西

 return hash + parseInt(time.getTime()).toString(36).toUpperCase();
它会让你的ID在99.99%的时间里保持唯一

我的问题是,从统计上看,如果我有99999999行,下一行将被复制,我不希望重复

您可以获得只有两行的副本。例如,使用哈希函数,以下两次都将输出
2095

alert("AP".hashCode());
alert("B1".hashCode());
散列,从本质上来说,会从输入中丢弃数据,因此除非您确切知道哪些数据是多余的,否则无法避免重复。这就是所谓的散列,但除非您事先知道可能需要散列的所有可能输入,否则无法完成完美的散列

否则,您可以使哈希代码更长或更复杂,以减少重复,但它不能保证避免重复,除非哈希至少与任何可能输入的信息内容一样长,否则哈希根本没有意义


在我看来,散列不是解决问题的正确方法。

谢谢你的回答,请告诉我,如果我仍然使用md5会怎么样?我的唯一性机会更大吗?@Xalloumokkelos md5具有更高的唯一性机会,因为它更长,而且可以更好地分发更改(更改输入中的单个位会使整个哈希重新随机化)。但是,MD5对于蓄意的冲突攻击是完全不安全的。这取决于您想用它做什么:如果您只是想在随机数据上获得高概率的唯一性,MD5就可以了,但如果您依赖唯一性来确保安全性,则MD5是不合适的,因为用户可以设计数据来故意碰撞哈希以破坏该安全性ty.如果你需要一个哈希值来保证安全性,请看SHA-256或SHA-512。我明白了,但这不是一个安全问题,我要做的是将kb尽可能小,并对文本进行哈希处理以保存在数据库中,但它必须是唯一的。是否有可能在现有的数据中添加更多的数字?如果是数据库,那么你不应该这样做吗在PHP而不是JavaScript方面?无论如何,不可能得到一个小且保证唯一的散列。MD5非常小,可能是唯一的,所以它可能是您能得到的最好的。这是一个好的观点,但我要做的是得到屏幕大小和类似的内容,并将其作为MD5而不是所有文本发送