測試在這 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
我分析了源碼但找不到產生的核心,百度Google也找遍了,所以來此請教大神幫幫忙(⊙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
我分析了源碼但找不到產生的核心,百度Google也找遍了,所以來此請教大神幫幫忙(⊙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 (重複)