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

algorithm to generate short unique human readable id from first and last name

本文关键字:人类 唯一 算法 ID      更新时间:2023-09-26

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

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

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

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

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

只是担心加密货币很难,我欢迎任何认为自己知道自己在做什么的人的建议。

如果它有帮助,我希望制作的 id 数量很少 - 大约 4 位。

一种技术是只使用名字和姓氏的组合,类似于大公司创建电子邮件别名的方式。 如果您只创建几千个,那么解决碰撞并不难。 这些可能是最人性化的ID类型。例如,比尔史密斯会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);
}