类似Bit.ly的短代码算法


Bit.ly like shortcode algorithm

我正在尝试为客户端制作一个url缩短器。我现在有一个不错的算法,唯一的问题是,如果客户端为不同的促销缩短相同的URL,它会创建相同的代码。

我能做些什么来防止这种情况发生?

$hash = sha1($this->data[$this->alias]['us_url']);
$this->data[$this->alias]['shortid'] = base_convert(hexdec($hash), 10, 32);

我希望能够为同一个url创建多个短代码,以不同的方式跟踪它。

与创建密码哈希时的过程相同:使用一些salt。

$hash = sha1($randomly_generated_salt . $my_url);

因此,相同的输入字符串将创建不同的散列。盐应该有一个合适的长度来提供足够的熵。

(尽管您不会使用sha1来散列密码!)

添加提供自定义url的可能性。在伪代码中:

if(isset($customUrl) && isUniqueLabel($customUrl)) {
    createCustomUrl()
} else {
   createUsualUrl()
}

给定自定义URL,客户端可以手动定义URL(就像is.gd和许多其他服务正在做的那样),这将增加自定义的可能性。