如何基于id生成不可思议的"小网址"?

Tom*_*Tom 6 php tinyurl url-shortener base36

我有兴趣创建像链接一样的小网址.我的想法是简单地为发布的每个长URL存储递增标识符,然后将此id转换为它的基本36变体,如下面的PHP中所示:

$tinyurl = base_convert($id, 10, 36)
Run Code Online (Sandbox Code Playgroud)

这里的问题是结果是可猜测的,虽然必须很难猜出下一个网址是什么,但仍然很短(很小).例如.如果我的最后一个小小的是a1,那么下一个将是a2.这对我来说是件坏事.

那么,我如何确保生成的小网址不是可猜测但仍然很短?

rel*_*let 9

您要求的是在信息减少(数据库中的索引到URL)和人为增加信息(在序列中创建漏洞)之间取得平衡.

你必须决定两者对你有多重要.另一个问题是,您是否只是不希望连续URL是可猜测的,或者让它们足够随机以便难以猜测任何有效的URL.

基本上,您希望从N个有效ID中声明n.选择N较小以使URL更短,并使n更小以生成难以猜测的URL.使n和N更大,以便在采用较短的URL时生成更多URL.

要分配ID,您可以使用任何类型的随机生成器或散列函数,并将其限制为目标范围N.如果检测到碰撞,请选择下一个随机值.如果已达到n个唯一ID的计数,则必须增加ID集的范围(n和N).


dev*_*ler 5

我只想crc32网址

$url = 'http://www.google.com';
$tinyurl = hash('crc32', $url ); // db85f073
Run Code Online (Sandbox Code Playgroud)

缺点:常量8个字符长的标识符