Sen URL saklamak zorunda gidiyoruz, böylece basit bir tablo var:
id otomatik artışlı dizisidir ve url sütun endeksli nerede. Bu şekilde her bir URL benzersizdir. Basit yöntem sadece kimliğini kullanmak ama bu daha kısa alabiliriz.
Benim önerim bir üs 62 (10 hane, 26 büyük harf, küçük harf 26 = 62) veya muhtemelen 64 (eklemek _ ve -) gelen ve kimliği dönüştürmek olacaktır.
Bu ben 1234 gerçekten demek:
1 x 10 3 + 2 x 10 2 + 3 x 10 1 + 4 x 10 0
ve 10 form ve tabanına bir dizi dönüm için oldukça basit bir algoritma var. Yani bir baz 62 "sayısı":
1234 (10 tabanı) = 19 x 62 1 + 56 x 62 0 = Jq
benim matematik doğru ise.
Aşağıdaki işlevler ne gerek yapmalıyım.
$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()
dönüştürür 1234 "Qj" (umarım) ve benim matematik kapalı olmadıkça to10()
, 1234 "Qj" dönüştürür.
Basamak aslında uğraşmak kolay, çünkü tersten ("321" olarak yazılmış olan "123" eşdeğer) saklanır ve belirli bir sırayla olması basamak için gerek yoktur vardır.