Как пользоваться
- Выберите «Кодировать», чтобы перевести текст в Crockford Base32, или «Декодировать», чтобы получить текст обратно.
- Оставьте выбранным вариант «Crockford» и убедитесь, что «Дополнение» отключено. Для вывода строчными буквами включите «Нижний регистр».
- Введите или вставьте входные данные либо откройте файл. При декодировании дефисы и пробелы игнорируются.
- Скопируйте результат или скачайте его в виде файла.
Что такое Crockford Base32?
Дуглас Крокфорд разработал этот алфавит Base32 для идентификаторов, которые люди читают, набирают и произносят вслух. В нём десять цифр и 22 заглавные буквы: 0123456789ABCDEFGHJKMNPQRSTVWXYZ. Буквы I и L исключены, потому что похожи на цифру 1, O — потому что похожа на 0, а U — чтобы снизить вероятность случайно составить непристойное слово.
Каждый символ несёт 5 бит, поэтому 5 байтов превращаются в 8 символов, как и в Base32 по RFC 4648. Символы расположены по возрастанию кодов ASCII, поэтому строки без дополнения в одном регистре сортируются в том же порядке, что и закодированные в них данные. Спецификация Крокфорда не использует дополнение, поэтому параметр «Дополнение» должен оставаться отключённым.
Декодирование, терпимое к опечаткам
Спецификация Крокфорда требует, чтобы декодеры принимали то, что люди набирают на самом деле, и этот инструмент так и делает:
- Заглавные и строчные буквы считаются одинаковыми.
- Буква O читается как цифра 0, а буквы I и L — как 1.
- Дефисы, которые можно вставлять для удобства чтения длинных кодов, игнорируются, как и пробелы и переводы строк.
Буква U недопустима, и о ней сообщается вместе с её позицией.
Байты, числа и ULID
Крокфорд описывает свою кодировку в терминах чисел, а этот инструмент кодирует последовательность байтов группами по 5 бит, как в RFC 4648, используя символы Крокфорда. Если количество бит не кратно 5, реализации на основе чисел ставят лишние нулевые биты в начало, а этот инструмент — в конец, поэтому результаты могут различаться.
Распространённый пример — ULID. Он использует алфавит Крокфорда, но кодирует своё 128-битное значение как число из 26 символов, поэтому 16 байтов ULID здесь кодируются не в ту же строку, а при декодировании ULID получаются байты, сдвинутые на два бита. Необязательный контрольный символ из спецификации Крокфорда, то есть дополнительный символ для значения по модулю 37, не поддерживается: этот инструмент его не добавляет и не проверяет.
Спецификация
| Алфавит | 0-9 A-Z без I L O U |
|---|---|
| Размер результата | 8 символов на каждые 5 байт (160%) |
| Дополнение | Нет |
| Стандарт | Crockford Base32 (2002) |
| Учёт регистра | Нет |
Примеры
| Исходные данные (UTF-8) | Результат |
|---|---|
Hello, World! | 91JPRV3F5GG5EVVJDHJ22 |
Base64.is | 89GQ6S9P6GQ6JWR |
你好 | WJYT1SD5QM |
Часто задаваемые вопросы
Учитывает ли Crockford Base32 регистр?
Нет. По умолчанию результат выводится в верхнем регистре, а параметр «Нижний регистр» переключает его на строчные буквы. Декодер принимает оба варианта, даже вперемешку в одной строке.
Почему в алфавите нет I, L, O и U?
I и L легко спутать с 1, а O — с 0, поэтому они исключены и при декодировании читаются как эти цифры. U исключена, чтобы случайные коды реже складывались в оскорбительные английские слова.
Поддерживает ли этот инструмент контрольный символ Крокфорда?
* ~ $ = U. Этот инструмент его не добавляет и не проверяет, поэтому удалите контрольный символ перед декодированием.Можно ли декодировать здесь ULID?
Получить ровно его 16 байтов не получится. ULID кодирует свои 128 бит как одно число с лишними битами в начале, а этот инструмент работает с группами байтов и ставит их в конец. Чтобы прочитать метку времени и случайную часть, используйте библиотеку для ULID.