寻找一种算法,当给出名字和姓氏时,会生成一个id,使其由纯字母数字字符组成。此外,我希望在保持独特性的同时尽可能缩短。我希望大约10-12个字符 - 人类可以进入的东西。
我已经读过关于计算哈希的建议,然后简单地取前n个字节并用36调用模数(这个想法是你有一个从0-35到字母az 0-9的映射)。
还听说过可能会截断并使用更高的基数将更多位打包到id中的建议。
我想我可以将生成时间的一些编码附加到生成的id以使其唯一,但我再次需要一种方法来缩短它。
你有什么看法?我应该采用特定的哈希算法/截断方法吗?我将在javascript中实现它,作为用作本地webapp的静态html页面的一部分。
我只是担心加密很难,我会欢迎那些认为他们知道自己在做什么的人的建议。
如果它有助于我期望的ID数量很小 - 大约4位数。
答案 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);
}