欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

请问这样的短网址是怎么做到发号的

程序员文章站 2022-05-17 14:16:30
...
测试在这 http://nh.gs/

我连续生成网址得到
http://nh.gs/4hm
http://nh.gs/con

base62后
4hm => 16452
con => 47639

传统的都是生成5到6位的,这个应该是自增的,但是为什么连续生成的经过base62后数值却差这么多,按理是连续的,我想应该是使用了某种方法防止并发重复生成,这是这个短网址源码的下载地址http://pan.baidu.com/s/1pJ4zLDD

我分析了源码但找不到生成的核心,百度谷歌也找遍了,所以来此请教大神帮帮忙(⊙0⊙)

回复内容:

测试在这 http://nh.gs/

我连续生成网址得到
http://nh.gs/4hm
http://nh.gs/con

base62后
4hm => 16452
con => 47639

传统的都是生成5到6位的,这个应该是自增的,但是为什么连续生成的经过base62后数值却差这么多,按理是连续的,我想应该是使用了某种方法防止并发重复生成,这是这个短网址源码的下载地址http://pan.baidu.com/s/1pJ4zLDD

我分析了源码但找不到生成的核心,百度谷歌也找遍了,所以来此请教大神帮帮忙(⊙0⊙)

Uploads/Web/Lib/Action/IndexAction.class.php 第 268 行.

            $data['tinyurl'] = getfreetiny($model->field('tinyurl')->select());

getfreetiny 定义在 Uploads/Web/Common/common.php 中第 33 行.
getfreetiny 函数中有调用 它上面的(第22行) get_tinyurl 来根据getfreetiny中生成的随机数转换为对应的字符串.

所以结论是那个数字是随机生成的. 所以你才会看到相差这么大的结果.

大概看了一下源码,在 ApiAction.class.php 中找到几句

php    public function thirdapi()
    {
        $method = trim($_GET['api']);
        $url = trim($_POST['url']);
        $url = empty($url) ? 'http://www.baidu.com': $url;
        if($method=='dwz')
        {
            $baseurl  = "http://dwz.cn/create.php";
            $data=array('url'=>$url);
        }

所以估计是调用的 dwz.cn 的 API 来生成的,不是自己实现的算法。

重複就重複唄

首先重複的概率很小

其次就算重複了也可以再重新生成

就醬紫。

do {
    生成隨機數
} while (重複)