有没有办法缩短字符串唯一ID的数组,同时仍然确保独特性?

时间:2016-09-12 15:12:21

标签: javascript node.js string firebase-realtime-database uniqueidentifier

我有一个来自Firebase数据库的字符串唯一ID数组,其中一个如下所示:QXgZI3JB72Zf1qzeawIdxHSsPa62

我想将这些ID打印给用户,但首先我想首先将id缩短到最少约7个字符,但是如果两个缩短的id最终变得相等,那么它会超过这个长度。这样,如果有人想要引用特定的ID,他们可以使用缩短版本而不会意外地引用多个内容。

有没有办法实现这个目标?

为了更好地了解我正在谈论的内容,请参阅git命令git rev-parsedocs),其中--short标志为{{1}}将提交哈希值剪切为至少7个字符(但如果它不再唯一,则允许它更长):

  

尝试将它们缩写为更短的唯一名称,而不是输出对象名称的完整SHA-1值。

2 个答案:

答案 0 :(得分:0)

我认为没有安全的方法可以在生成后缩短唯一ID(CMIIAW)。

ids unqueness由中央服务器保证,它保证了它们的唯一性:在发生冲突的情况下,它将重新计算不同的id,直到它是唯一的。

如果你在发布后缩短ID,那么你不可能100%保证它们是唯一的,如果你不想重播服务器的工作,保留一个id数据库......

如你所说git --short打印一个缩短版本的提交ID,但会允许它更长,以防它不再是唯一的 ...

答案 1 :(得分:0)

问题中缺少的是你是否愿意保留查找表,或者你是否正在寻求一种双向编码方法,其中长字符串通过算法编码为较短的字符串,然后可以将其解码为原始字符串。

如果是后者,那么祝你好运,如果/当你找到它,请在这里发布你的答案!

否则,只需对键/值对进行哈希:

var dbKeyHash = { "xyz":"QXgZI3JB72Zf1qzeawIdxHSsPa62",
   ...
}

密钥可以是递增数字,也可以是任何其他短但唯一的字符串。通过数据库键列表,您可以随机生成一个短字符串,如果它不在哈希中,请使用它,否则,生成另一个并继续。

然后,当用户引用您显示的其中一个短键时,您只需在哈希值中查找该值:

var dbKey = dbKeyHash['xyz'] // QXgZI3JB72Zf1qzeawIdxHSsPa62

就生成短字符串而言,您可能会在此主题上找到一些好的东西:How to code a URL shortener?