我正在寻找将MongoDB ID 504aaedeff558cb507000004
转换为PHP
中较短代表的最佳方式?基本上,用户可以在应用程序中引用id,并且那个长字符串很难。
唯一需要注意的是,碰撞应该是“罕见的”。我们能以某种方式将它降低到4,5或6个字符吗?
感谢。
答案 0 :(得分:1)
虽然十六进制数字可以存储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));
}
答案 1 :(得分:0)
您的唯一ID可以由[0-9a-f]
映射。缩短可以通过多种方式完成 - 一种简单的方法是重新映射字符集。
我们的目标是通过替换字符将字符串大小减少到两个。一个字符是16个中的一个,所以两个字符给你16 ^ 2 = 256种可能性......我相信你知道我要去哪里。记下字符串中的每个字符,并计算映射值。生成相应的ASCII字符,然后使用它。如果你不喜欢在最后有这样一个丑陋的ID,对它进行base64编码 - 你会得到一个大约比你开始时短1/3的字符串。