首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开发自己的“哈希”算法

开发自己的“哈希”算法
EN

Stack Overflow用户
提问于 2018-11-12 19:54:08
回答 1查看 258关注 0票数 0

因此,我在之间得到了一个整数变量

我希望将每个数字转换为具有固定长度和自定义字符集(包括所有字母、小写和大写字符)的unique!哈希值。

所以:

  • n=10可以到达result="AVduujANNiO"
  • n=4507可以到达result="BciidEPpaEo"

我真的不知道如何开发这样的算法,所以到目前为止,我只知道这一点。我认为算法应该可以工作,但当然,我得到一个整数值作为散列-而不是一个字母值。不知道如何解决这个问题,也不知道如何填充结果,给它一个固定的长度。

我真希望有人能帮我。

代码语言:javascript
复制
let value = "3325";


var getHash = function(value) {
  let hash = 0;
  for (let i = 0; i < value.length; i++) {
    let char = value.charCodeAt(i);
    hash = (hash << 6) + char + (char << 14);
    hash=-hash
  } return hash;
};

console.log(getHash(value))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-13 03:09:11

这里有一个散列函数,它看起来像在做您想要的那样:)作为一个额外的奖励,它不提供冲突,直到100,000。

代码语言:javascript
复制
function h(n){
  let s = [
    '0101000', '1011010', '0011111',
    '1100001', '1100101', '1011001',
    '1110011', '1010101', '1000111',
    '0001100', '1001000'].map(x => parseInt(x, 2));
    
  let m = parseInt('101', 2);
  
  s = s.map(x => {
    n ^= m;
    m <<= 1;
    return (x ^ n) % 52;
  });

  return s.map(x =>
    String.fromCharCode(x > 25 ? 71 + x : 65 + x)
  ).join('');
}

const s = {};

for (let j=1; j <=10000; j++){
  let hash = h(j);
  
  if (s[hash])
    console.log('Collision! ' + j + ' <-> ' + s[hash]);
    
  s[hash] = j;
}

console.log('Done. No collisions below 10000.');

for (let j=1; j <11; j++)
  console.log(j, h(j));

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53269191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档