2009-10-30 8 views
11

Używam identyfikatorów UUID, ale nie są szczególnie miłe w czytaniu, pisaniu i komunikowaniu się. Więc chciałbym je zakodować. Mogę użyć base64 lub base32, ale i tak nie będzie to łatwe: base64 ma wielkie litery i symbole. Base32 jest trochę lepszy, ale nadal można uzyskać niezgrabne rzeczy.Czy istnieje kodowanie, które można wymówić?

Zastanawiam się, czy istnieje ładny i czysty sposób kodowania liczby w smaczne fonemy, aby uzyskać lepszą czytelność i, miejmy nadzieję, trochę kompresji.

+0

Szukasz sposobu, aby uuids były niezapomniane (jak w hasłach do wymówienia) lub po prostu skutecznym sposobem, na przykład, przeczytać do kogoś przez telefon? –

+0

czytaj je przez telefon i rozmawiaj o nich z łatwością. Mogłabym również wdrożyć strategię wyszukiwania (np. Skrócone adresy URL), ale zanim to zrobię, chcę dowiedzieć się nieco więcej na ten temat. –

Odpowiedz

6

Bubble Babble jest dobrym rozwiązaniem. Generuje bezsensowny ale czytelny wyjście jak:

xesef-disof-gytuf-katof-movif-baxux 
+0

To kodowanie jest niezwykle piękne! – slebetman

-3

Gdyby były łatwe do odczytania, prawdopodobnie nie byłyby wyjątkowe.

+0

To nie prawda. UUID to tylko duża liczba. To, jak ją kodujesz, robi różnicę. –

+0

To wydaje się rozsądne stwierdzenie: zbiór możliwych do wymówienia obiektów ** jest ** prawdopodobnie mniejszy niż zbiór unikalnych liczb. – pavium

+0

Jeśli wiesz, że to nieprawda, dlaczego nie rozwiązałeś swojego problemu? –

12

Mam nadzieję, że nie korzystają z tego pomysłu: The Automated Curse Generator :)

+0

Mam nadzieję, że to zrobisz! –

+1

To jest fantastyczne. Naprawdę nie mogę powiedzieć, że rozwiązałeś moje pytanie, ale zdecydowanie podałeś interesujący punkt widzenia. +1 –

3

Dlaczego nie użyć coś podobnego do tego, co robi PGP do tworzenia czytelnych przycisków, wystarczy znaleźć ładne listę słów, które są charakterystyczne, powiedzmy, że” ponownie używając 128-bitowych UUID, lista 256 słów (2^8) oznacza 16 słów.

Głupie pytanie, ale dlaczego ludzie czytają/piszą numery UUID/etc. w odniesieniu do twojego wniosku?

+0

Potrzebuję generować unikalne identyfikatory, ponieważ zamierzam przeprowadzić scalanie w przyszłości. Jednak obiekty, które utworzę są identyfikowane przez URI, które zawierają UUID. Oczywiście mogę przypisać bardziej znaczące nazwy, ale nie mogę oczekiwać, że każdy tworzony obiekt ma sensowną nazwę. Mimo to chciałbym mieć coś, co można określić. –

+0

Twój pomysł jest interesujący. Myślę, że używanie pełnych słów to trochę przesada, ale lubię to. Szuka jednak czegoś krótszego. –

+0

Wtedy po prostu zabrałbym kodowanie szesnastkowe, 0-9, a-f, większość ludzi może je odczytać/wymówić bez większych problemów. – Kurt

0

i mam nadzieję trochę kompresji

nie jestem pewien dokładnie to, czego nie znaczy; uczynienie czegoś "czytelnego" lub "wymawiającego" nieuchronnie zwiększy wymaganą dla niego przestrzeń. Może miałeś na myśli "miejmy nadzieję, trochę nadmiarowości"? Byłoby dobrze, gdyby nawet użytkownik popełnił drobny błąd, system może go wykryć, a nawet poprawić.

To zależy w dużym stopniu od tego, jak duże są Twoje identyfikatory UUID i jak często są komunikowane. Jeśli muszą być komunikowane przez telefon lub VoIP, potrzebujesz bardziej słyszalnej nadmiarowości. Jeśli muszą być wprowadzane do urządzeń mobilnych za pomocą klawiatur numerycznych, trudno jest wprowadzić znaki alfabetyczne, moreso, jeśli są rozróżniane wielkie i małe litery. Jeśli są dużo zapisywane, musisz się martwić o znaki, które wyglądają podobnie (na przykład O i 0 i o). Jeśli trzeba je zapamiętać, to prawdopodobnie najskuteczniejsze są ciągi prawdziwych słów (spójrz na PGP Word List).

Jednak myślę, że doskonałym, wszechstronnym rozwiązaniem jest użycie cyfr. Są o wiele trudniejsze do zmylenia ze sobą (zarówno w mowie, jak iw piśmie) niż niektóre znaki alfabetu. Łatwo wejść na urządzenia mobilne, a ludzie nie są zbyt źli w zapamiętywaniu numerów.

I długość sznurka też nie jest taka zła. Porównajmy base32 z base 10 (decimal). Długość ciągu dziesiętnego to log_10(32) razy długość odpowiedniego ciągu base32 lub około 1,5 razy dłuższy. Dziesięć znaków z base32 odpowiada 15 cyfrom dziesiętnym.

Mało kary, IMO, widząc jak w bazie 32, łatwo jest pomylić C i T, lub S, F i X (kiedy się mówi), a ktoś mówiący z obcym akcentem jest bardziej prawdopodobny, by sprawić kłopoty.

+1

Mam na myśli to, że na przykład sekwencja od 00 do FF znajduje się w bazie 16. Jeśli akceptujesz żetony takie jak "wa" lub "su" lub "me", masz większą elastyczność, a tym samym zajmuje mniej miejsca. Na przykład UUID zakodowany w base64 zajmuje tylko 22 znaki, a 26 w base32. –

+0

Poszukujesz zatem wydajnej przestrzeni lub czasu (niekoniecznie dla komputera, może dla osoby) reprezentującej UUID. Zrewidowałem swoją odpowiedź, aby dalej dyskutować, dlaczego uważam, że KISS (i używanie dziesiętnych) jest często najlepszym sposobem. – Artelius

+1

Jeśli używasz długich ciągów cyfr PROSIMY wstawiaj myślnik co 4 znaki, aby ludzie mogli używać dobrze wyszkolonej krótkiej pamięci (numery kart kredytowych, numer telefonu) do odczytywania cyfr w grupach po 4. – Kurt

1

S/KEY używa słownika 2048 słów do odwzorowania 64-bitowych liczb na sekwencję 6 predefined słów/sylab.(Ludzie zawsze znajdą przekleństwa, jeśli ich szukają;))

3

Jeśli wszystko, co chcesz, to sposób na łatwe komunikowanie wartości szesnastkowych (np. Przez telefon lub instruowanie kogoś słownie, co wpisać), a następnie Proponuję użyć jednego z różnych fonetycznych alfabetów, takich jak NATO Phonetic Alphabet lub US Army/Navy Phonetic Alphabet.

W tym ostatnim, litery AF są wymawiane odpowiednio jako "stanie", "piekarz", "charlie", "pies", "łatwy" i "lis", abyś mógł przeczytać sekwencję szesnastkową "3fd2cc0e "jako" trzy lisie pies dwa charlie charlie zero łatwe ". Uuid zostanie odczytany w dokładnie taki sam sposób.

1

Bubble bełkot i base32 są nieefektywne, szczególnie w twoim przypadku. Proponuję stworzyć własny algorytm. Ponieważ istnieje 20 spółgłosek i 6 samogłosek (w tym "y") możesz mieć ok. 20 * 6 * 2 + 6 * 6 = 276 spółgłosek/samogłoska-samogłoska/para spółgłoski. Więc każdy bajt twojego numeru może być reprezentowany przez parę. Przy odrobinie ulepszenia twój algorytm może wytworzyć wymowne słowa o wiele krótsze niż bełkotanie. Możesz nawet zagrać w kości i zastąpić wszystkie dziwne cyfry spółgłoską/samogłoską. Na przykładABCDEF (hex) koduje do ABECIDOFUGYHKRM. 3141592654 (dec) koduje do HHIA-ROIR. Zostało ci dziesięć spółgłosek, które można sparować z samogłoskami, aby zastąpić jakieś podwójne spółgłoski itd.

Powiązane problemy