我有一个来自Firebase数据库的字符串唯一ID数组,其中一个如下所示:QXgZI3JB72Zf1qzeawIdxHSsPa62
我想将这些ID打印给用户,但首先我想首先将id缩短到最少约7个字符,但是如果两个缩短的id最终变得相等,那么它会超过这个长度。这样,如果有人想要引用特定的ID,他们可以使用缩短版本而不会意外地引用多个内容。
有没有办法实现这个目标?
为了更好地了解我正在谈论的内容,请参阅git
命令git rev-parse
(docs),其中--short
标志为{{1}}将提交哈希值剪切为至少7个字符(但如果它不再唯一,则允许它更长):
尝试将它们缩写为更短的唯一名称,而不是输出对象名称的完整SHA-1值。
答案 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?