私はphpを学んでいるプロジェクトのURL短縮機能をコーディングしています。コードは次のとおりです(ところで、global
ここで行うのは良いことではないと思います:P):
$alphabet = array(1 => "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"0","1","2","3","4","5","6","7","8","9","_","-");
function shorten($id){
global $alphabet;
$shortenedId = "";
while($id>0){
$remainder = $id % 64;
$id = $id / 64;
$shortenedId = $alphabet[$remainder].$shortenedId;
}
return $shortenedId;
}
コードは、このウィキペディアの記事から取得 され、php に適合されています。私の問題は、関数に 64 の倍数を渡すと、(私の目的では) 間違った結果が得られることです。たとえば、128 は b を返しますが、これは正しくありません。番号。
また、nItOq を取得するときに 1'000'000'000'000 を渡すと、このコードに何か問題があるのではないかと考え始めています$id
... bit.ly のような URL 短縮サービスが 6 を返すため、それは間違っていると感じています。私がそれを使用する場合は番号IDであり、このアルゴリズムが彼らのものより優れているとは思いません.
だから、2つの質問:
- 上記のコードにバグを見つけましたか?
- 64 個の複数の ID を管理するには? それらを無視して次のものに渡す必要がありますか?