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

How to edit this JS code so to add chars in the hashed text instead of only numbers

本文关键字:文本 添加 数字 不仅仅是 字符 编辑 何编辑 代码 JS      更新时间:2023-09-26

我使用此代码来避免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;
};

如图所示http://jsfiddle.net/h0ef92Lu/

并且它创建xxxxxxxxxx(10)个数字的散列。我的问题是,从统计数据来看,如果我有9999999999行,下一行将重复,我不希望重复。所以,我想在数字中添加字符。

我的问题是如何做到这一点,它适用吗?

在我的脑海中,你可以使用这样的

 return hash + parseInt(time.getTime()).toString(36).toUpperCase();

它将使您的ID在

的99.99%的时间内保持唯一

我的问题是,从统计数据来看,如果我有9999999999行,下一行将重复,我不希望重复。

只需两行就可以获得重复项。例如,使用您的散列函数,以下两次都将输出2095

alert("AP".hashCode());
alert("B1".hashCode());

哈希从本质上来说会丢弃输入中的数据,因此除非您确切地知道哪些数据是多余的,否则您无法避免重复。这被称为完美哈希,但除非你事先知道所有可能需要哈希的输入,否则你无法进行完美哈希。

否则,你可以让你的哈希代码变得更长或更复杂,以减少重复,但这并不能保证避免重复,除非哈希至少和任何可能输入的信息内容一样长,然后对它进行哈希根本没有意义。

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