Base64 url ​​kısalma Base10

0 Cevap php

Ben php öğrenme yaşıyorum hangi bir proje için bir url kısaltma işlevi kodlama ediyorum, buraya (: P btw I global Burada yapılacak iyi bir şey olmadığını varsayalım) kodu:

$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;
}

Kod this Wikipedia article alınan ve php uyarlanır. Benim sorunum işlevine 64 katlarını geçerken Örneğin ben (benim amaç için) bir yanlış sonuç doğru değildir, 128 döner b almak olduğunu, bu aaa olmalıydı, ama bu 3 basamak için çok uzun numarası.

Ayrıca ben $id Ben ... Ben bunun yanlış olduğunu nItOq hissediyorum almak gibi 1'000'000'000'000 geçirirseniz yanlış bir şey, bu kodu var olduğunu düşünmeye başlıyorum çünkü bir url kısaltma servisi gibi bit.ly Bunu kullanmak eğer bir 6 numara kimliğini döndüren, ve ben bu algoritma onların daha iyi olduğunu sanmıyorum.

Yani, iki soru:

  • Yukarıdaki kodda herhangi bir hata nokta mı?
  • 64-Birden kimlikleri yönetmek nasıl? Ben sadece onları görmezden ve bir sonrakine geçmek zorunda mı?

0 Cevap