我读过关于这个主题的大约5-10篇不同的文章,但都没有给出一个明确的例子。他们解释了背景故事。
之间的常数。
示例:
http://wwwurl.com/1将再次成为http://wwwurl.com/ASd234s,http://wwwurl.com/5000000将成为http://wwwurl.com/Y2v0R4r
我能得到一个清晰的函数代码来完成这项工作吗,谢谢。
发布于 2012-04-24 12:08:12
若要将id数减少为较短的字符串,请将其转换为基数35.
$short_id=base_convert($id, 10, 35);如果您想要更难预测序列是什么,请用已知的字符串填充它并使用xor:
function shortcode($id)
{
$short_id=str_pad($short_id, 4, '0', STR_PAD_LEFT);
$final='';
$key='a59t'; // 500000 = 'bn5p'
for ($x=0; $x<strlen($short_id); $x++) {
$final=chr('0') | (ord(substr($short_id, $x, 1)) ^ ord(substr($key, $x, 1));
}
return $final;
}要拿回原来的身份,只需逆转这个过程。
发布于 2012-04-24 10:03:27
一个非常愚蠢的例子--例如使用substr(md5($id), 10, 15),其中$id是您的1-500000记录ID号。在位置10和15之间(但也可以使用位置24-28等)在32个字符哈希码中生成相同哈希的概率限制在零.
最好将ID <->映射保存到DB表中,以便根据URL轻松找到相关记录。
整个源代码--哈希创建、URL重写、基于URL的映射保存和记录检索--是一个非常复杂的问题,可以在数千个变体中实现,主要取决于程序员的技能、经验以及他正在实现的系统.
https://stackoverflow.com/questions/10295328
复制相似问题