Javascript 如何限制散列长度

Javascript 如何限制散列长度,javascript,hash,Javascript,Hash,我需要使用这个散列算法,但我的问题是什么 我能把它定长吗? 我需要它的长度为6或7个字符,有时较大,有时较小 String.prototype.hashCode=函数(){ var hash=0, i、 chr,len; 如果(this.length==0)返回哈希; for(i=0,len=this.length;i

我需要使用这个散列算法,但我的问题是什么 我能把它定长吗? 我需要它的长度为6或7个字符,有时较大,有时较小

String.prototype.hashCode=函数(){
var hash=0,
i、 chr,len;
如果(this.length==0)返回哈希;
for(i=0,len=this.length;ihash=((hash我通常坚持使用已知的hash方法,最好使用一种算法,该算法本身可以强制执行常量长度,但hash仍然是hash,只要对相同的值是相同的,就可以了,否则可能效率很低

因此,有一种简单的方法总是有效的,那就是剪掉理想长度以上的尾随部分,并填充太短的字符串。关于填充,您可以在这里阅读:

如果您可以使用简单的str.substr调用,请参阅下面更新的fiddle以获取exmaple。您可能需要处理负片处理。此外,我不确定哈希是否可以正确处理超长字符串,但一般机制保持不变

var mystring=“t7”//一些文本字符串
功能板(str,max){//这会将“0”添加到“较小”的数字中
str=str.toString();
返回str.lengthhash=((hash-JSFiddle不起作用。我不认为这个实现可以轻易地更改为任何输入的定长hash,但是您可以在前面用“0”填充它,然后剪切太长的内容并保持定长:)但是,我不确定它是否适用于很长的字符串。@mikus-这是一个很好的点,前导的零可以请您更新jsBin,因为这可能是一个答案!非常感谢,请参阅下面的答案:)
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;
};
var mystring = "t7";      //some text string

function pad (str, max) {  //this will add '0' to 'smaller' numbers
  str = str.toString();
  return str.length < max ? pad("0" + str, max) : str;
}

//your method untouched
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;
};

var hash_length =7;     //constant hash length, 
var hashCode = mystring.hashCode(); 
//padded with '0's if too short
var padded = pad(hashCode, hash_length);    
//trimmed if too long
var trimmed = hashCode.toString().substr(0,hash_length);    
//padded and trimmed if too long
var trimmedAndPadded = pad(hashCode.toString().substr(0,hash_length), hash_length));