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

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

我想把这些ID打印给用户,但是首先我想首先把ID缩短到最less7个字符左右,但是如果两个缩短的ID最终变成相等的话,那么这个ID就会超过这个长度。 这样,如果有人想要引用一个特定的ID,他们可以使用缩短的版本,而不会意外地指多个东西。

有什么办法可以做到这一点?


为了更好地了解我在说什么,请参阅git命令git rev-parse ( docs ),该文件具有--short标志,它将一个提交散列切割成至less7个字符长(但将允许它如果不再是独一无二的,则可以更长一些):

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

我认为没有安全的方法来缩短生产后的独特ID(CMIIAW)。

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

如果您在发出ID后缩短ID,则不能100%保证它们是唯一的,如果您不想重放服务器的工作,请保留ID的数据库…

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

这个问题缺less的是你是否愿意保留一个查找表,或者如果你正在寻找一个双向编码方法,其中长string被algorithm编码成一个较短的string,然后可以解码成原始string。

如果后者是这种情况,那么祝你好运,并请发布你的答案在这里,如果/当你find它!

否则,只要做一个键/值对的散列:

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

关键可能是一个递增的数字,或任何其他短而唯一的string。 通过你的数据库键列表,你可以随机生成一个简短的string,如果它不在哈希中,使用它,否则,生成另一个并继续。

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

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

就生成短string而言,您可能会在此线程中发现一些好东西: 如何编写URL缩短器?