我正在尝试找到一种将数据库 ID 编码为 short 的方法URL,例如 1 应变为“Ys47R”。然后我想将它从“Ys47R”解码回 1,这样我就可以使用该INT值运行数据库搜索。它需要使用数据库是唯一的ID。序列不应轻易猜到,例如 1 = "Ys47R", 2 = "Ys47S"。它应该类似于 YouTube 或 bitly 的URL's。md5我已经使用、和 `bcpow阅读了数百个不同的来源base32,base64但结果都是空的。
这篇博文看起来很有希望,但是一旦我添加了填充和密码,短 ID,例如 1 变成了 SDDDG,2 变成了“SDDDH”,3 变成了“SDDDI”。这不是很随机。
base32仅使用 ab 0-9
base64结尾有 == 等字符。
然后我尝试了这个:
function getRandomString($db, $length = 7) {
$validCharacters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$validCharNumber = strlen($validCharacters);
$result = "";
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1);
$result .= $validCharacters[$index];
}
这有效,但意味着我每次都必须运行数据库查询以确保没有冲突并且它在数据库中不存在。
有没有一种方法可以创建ID's至少 4 个字符的短字符集,其中的字符集[a-z][A-Z][0-9]可以编码和解码回来,ID在每个数字都是唯一的数据库中使用增量唯一。我无法理解使用base32or的高级技术base64。
或者我是否对此进行了太多研究,并且有更简单的方法可以做到这一点?最好做上面的随机字符串函数并查询数据库以检查唯一性吗?