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