算法从名字和姓氏生成短的唯一人类可读id

时间:2014-11-23 06:34:27

标签: javascript security uuid

寻找一种算法,当给出名字和姓氏时,会生成一个id,使其由纯字母数字字符组成。此外,我希望在保持独特性的同时尽可能缩短。我希望大约10-12个字符 - 人类可以进入的东西。

我已经读过关于计算哈希的建议,然后简单地取前n个字节并用36调用模数(这个想法是你有一个从0-35到字母az 0-9的映射)。

还听说过可能会截断并使用更高的基数将更多位打包到id中的建议。

我想我可以将生成时间的一些编码附加到生成的id以使其唯一,但我再次需要一种方法来缩短它。

你有什么看法?我应该采用特定的哈希算法/截断方法吗?我将在javascript中实现它,作为用作本地webapp的静态html页面的一部分。

我只是担心加密很难,我会​​欢迎那些认为他们知道自己在做什么的人的建议。

如果它有助于我期望的ID数量很小 - 大约4位数。

1 个答案:

答案 0 :(得分:0)

一种技术是使用名字和姓氏的组合,类似于大型公司创建电子邮件别名的方式。如果你只创造了几千个,那么解决碰撞并不困难。这些可能是最易于处理的人类友好类型。例如,比尔史密斯将是billsm或类似的东西。

如果你不想让你的id很容易猜到(虽然如果猜测一个id会破坏你的安全模型,你应该调查一下)然后你可以使用类似下面的内容(未经测试的javascript伪代码):

var sequence = 1,
    shardId = 1,
    epoch = 1357027200000;

function nextId() {
  sequence = sequence + 1;
  now = Date.now() - epoch;
  seqId = sequence % 1023
  nextId = now << 15 | shardId << 10 | seqId;

  return (nextId).toString(36);
}