我必須用這種方式來生成代碼的URL縮短服務在PHP中爲URL縮短服務生成代碼的最佳方式是什麼?
$code = substr(md5(uniqid(rand(), 1)), 3, 5);
但這總是產生(在此例5)的固定長度碼。
如果數據庫中有大量的URL無法忍受這五個符號,該怎麼辦?
對不起的英語感到抱歉。
我必須用這種方式來生成代碼的URL縮短服務在PHP中爲URL縮短服務生成代碼的最佳方式是什麼?
$code = substr(md5(uniqid(rand(), 1)), 3, 5);
但這總是產生(在此例5)的固定長度碼。
如果數據庫中有大量的URL無法忍受這五個符號,該怎麼辦?
對不起的英語感到抱歉。
你將不得不存儲URL所以只是有一個表:
其中id是自動遞增序列和網址列索引。這樣每個URL都是唯一的。最簡單的方法是簡單地使用ID,但可以比此更短。
我的建議是將ID轉換爲基數62(10個數字,26個大寫字母,26個小寫字母= 62)或可能64個(添加_和 - )。
我的意思是1234是真的:
1×10 + 2×10 + 3×10 + 4×10
,並有一個相當簡單的算法,用於將數字轉換爲基本形式。因此,一個基座62 「數量」 是:
1234(基體10)= 19×62 + 56 X 62 0 = JQ
如果我的數學是正確的。
以下功能應該做你需要的。
$digits = range(0, 9) + range('A', 'Z') + range('a', 'z')
function from10($base10) {
global $digits;
$ret = '';
$nd = count($digits);
$n = $nd;
while ($base10 > 0) {
$r = $base10 % $n;
$ret .= $digits[$r];
$n = (int)($base10/$n);
$n *= $nd;
}
return $ret;
}
function to10($baseN) {
global $digits;
$nd = count($digits);
$ret = 0;
$n = $nd;
for ($i=0; $i<strlen($baseN); $i++) {
$ret += $n * $baseN[$i];
$n *= $nd;
}
return $ret;
}
from10()
轉換1234 「QJ」(希望)和to10()
「QJ」 轉換爲1234,除非我的數學是關閉的。
這些數字實際上是以相反的順序存儲的(相當於「123」被寫爲「321」),因爲這樣更容易處理,並且不需要數字在任何特定位置訂購。