2009-08-14 10 views

Odpowiedz

10

Wygląda na to, że istnieją tylko znaki 73, których można używać w adresie URL bez zmiany znaczenia. Jeśli tak jest, możesz przekonwertować 128-bitową liczbę na bazę 73 i mieć 21-znakowy adres URL.

JEŻELI możesz znaleźć 85 znaków prawnych, możesz uzyskać adres URL o długości 20 znaków.

+0

Więc zapisujemy 9 znaków na adresie URL? Uważam, że łatwiej jest czytać/recytować szesnastkowy niż coś takiego jak 00amyWGct0y_ze4lIsj2Mw – hometoast

+0

@ hometoast: Tak, cóż, to nie wydaje się być ograniczeniem dla OP. ;) – retracile

+1

Użyłem kodowania Ascii85 do napisania Guid do kolumny bazy danych w 20 znakach ASCII. Wysłałem kod C# na wypadek, gdyby był przydatny. Specyficzny zestaw znaków może być inny dla kodowania URL, ale możesz wybrać dowolny znak odpowiedni dla twojej aplikacji. Jest dostępny tutaj: http://stackoverflow.com/questions/2827627/what-is-the-most-efficient-way-to-encode-an-arbitrary-guid-into-readable-ascii-3/4211088#4211088 – sheikhjabootie

5

identyfikator_GUID wygląda następująco c9a646d3-9c61-4cb7-bfcd-ee2522c8f633 - to 32 cyfry HEX, z których każdy koduje 4 bity, tak więc w całości 128 bitów

Kodowanie base64 używa 6 bitów na symbol, który jest łatwy aby uzyskać z bezpiecznymi adresami URL, aby nadać 22 znakowy łańcuch znaków. Jak zauważyli inni, możesz mieć 73 znaki url bezpieczne i zakodowane jako podstawowy numer 73, dając 21 znaków.

+0

Jak wyprowadziłeś bit "6 bitów z bezpiecznego znaku URL"? –

+0

Nie ma 127 znaków bezpiecznych adresów URL, więc założone 6 bitów byłoby maksymalne. –

+0

6 bitów to base64, do którego trafił oryginalny link. Jeśli uzyskasz więcej niż 64 znaki, powiedzmy 85, możesz przekonwertować 128-bitową liczbę na 85 i uzyskać maksymalnie 20 znaków. To po prostu nie będzie tak miłe jak base64. – retracile