将MongoDB id缩减为较短的哈希


Reduce a MongoDB id into a shorter hash

我正在寻找将MongoDB id 504aaedeff558cb507000004转换为PHP中较短表示形式的最佳方法?基本上,用户可以在应用程序中引用id,而长字符串很难。

需要注意的一点是,碰撞应该是"罕见的"。我们能把它减少到4、5或6个字符吗?

谢谢。

虽然一个十六进制数字可以存储16种不同的状态,但一个base64编码的数字可以存储64种不同的州,因此您可以将整个MongoDB Id存储在16位数字中,而不是24位,而不会丢失任何信息:

print hexToBase64("50b3701de3de2a2416000000") . "'n"; # -> ULNwHePeKiQWAAAA
print base64ToHex("ULNwHePeKiQWAAAA") . "'n";         # -> 50b3701de3de2a2416000000
function base64ToHex($string) {
  return bin2hex(base64_decode($string));
}
function hexToBase64($string) {
  return base64_encode(hex2bin($string));
}

[0-9a-f]可以映射您的唯一ID。缩短可以通过多种方式完成——一种简单的方法是重新映射字符集。

我们的目标是通过替换字符将字符串大小一分为二。一个字符是16个字符中的一个,所以两个字符给你16^2=256种可能性。。。我相信你知道我要做什么。取字符串中的每两个字符,计算映射值。生成相应的ASCII字符,并使用它。如果你不喜欢结尾有这样一个丑陋的ID,可以用base64对它进行编码——你会得到一个比你开始使用的ID大约短1/3的字符串。