Home >Backend Development >PHP Tutorial >请问这样的短网址是怎么做到发号的

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

WBOY
WBOYOriginal
2016-06-06 20:34:191136browse

测试在这 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 行.

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

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

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

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

<code>php</code><code>    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);
        }
</code>

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

重複就重複唄

首先重複的概率很小

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

就醬紫。

<code>do {
    生成隨機數
} while (重複)
</code>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn