Crockford Base32 인코더 및 디코더

텍스트, 16진수 바이트, 파일을 Douglas Crockford의 Base32로 변환하고 되돌립니다. 디코더는 입력 실수를 너그럽게 처리합니다. 대소문자와 하이픈을 무시하고 O는 0으로, I나 L은 1로 읽습니다.

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. 텍스트를 Crockford Base32로 바꾸려면 ‘인코딩’을, 다시 텍스트로 되돌리려면 ‘디코딩’을 선택합니다.
  2. ‘변형’은 ‘Crockford’로 그대로 두고 ‘패딩’이 꺼져 있는지 확인합니다. 소문자로 출력하려면 ‘소문자’를 켭니다.
  3. 내용을 입력하거나 붙여넣거나 파일을 엽니다. 디코딩할 때 하이픈과 공백은 무시됩니다.
  4. 결과를 복사하거나 파일로 다운로드합니다.

Crockford Base32란?

Douglas Crockford는 사람이 읽고, 입력하고, 소리 내어 말하는 식별자를 위해 이 Base32 알파벳을 설계했습니다. 숫자 10개와 대문자 22개, 즉 0123456789ABCDEFGHJKMNPQRSTVWXYZ를 사용합니다. 문자 I와 L은 숫자 1과, O는 0과 비슷해 보여서 제외했고, U는 우연히 외설적인 단어가 만들어질 가능성을 줄이기 위해 제외했습니다.

기호 하나가 5비트를 담으므로 RFC 4648 Base32와 마찬가지로 5바이트가 8문자가 됩니다. 기호는 ASCII 오름차순으로 배열되어 있어, 패딩 없이 같은 대소문자로 쓴 문자열은 인코딩된 데이터와 같은 순서로 정렬됩니다. Crockford의 사양은 패딩을 사용하지 않으므로 ‘패딩’ 옵션은 꺼 두십시오.

너그러운 디코딩

Crockford의 사양은 디코더가 사람이 실제로 입력하는 값을 받아들이도록 요구하며, 이 도구도 그렇게 동작합니다.

  • 대문자와 소문자를 똑같이 취급합니다.
  • 문자 O는 숫자 0으로, 문자 I와 L은 1로 읽습니다.
  • 긴 코드를 읽기 쉽게 하려고 넣은 하이픈은 무시하며, 공백과 줄 바꿈도 마찬가지로 무시합니다.

문자 U는 유효하지 않으므로 위치와 함께 오류로 표시됩니다.

바이트, 숫자, ULID

Crockford는 자신의 인코딩을 숫자를 기준으로 설명하지만, 이 도구는 바이트열을 RFC 4648 방식대로 5비트 묶음으로 나누어 Crockford의 기호로 인코딩합니다. 비트 수가 5의 배수가 아닐 때 숫자 기반 구현은 남는 0 비트를 앞에 두고 이 도구는 끝에 두므로 결과가 다를 수 있습니다.

대표적인 예가 ULID입니다. ULID는 Crockford 알파벳을 쓰지만 128비트 값을 하나의 숫자로 보고 26자로 인코딩합니다. 그래서 ULID의 16바이트를 여기서 인코딩하면 같은 문자열이 나오지 않고, ULID를 디코딩하면 2비트 밀린 바이트가 나옵니다. Crockford 사양의 선택적 검사 기호, 즉 값을 37로 나눈 나머지를 나타내는 추가 문자는 지원하지 않습니다. 이 도구는 검사 기호를 추가하지도 검증하지도 않습니다.

사양

알파벳0-9 A-Z(I L O U 제외)
출력 크기5바이트당 8문자(160%)
패딩없음
표준Crockford Base32(2002)
대소문자 구분아니요

예시

입력 (UTF-8)출력
Hello, World!91JPRV3F5GG5EVVJDHJ22
Base64.is89GQ6S9P6GQ6JWR
你好WJYT1SD5QM

자주 묻는 질문

Crockford Base32는 대소문자를 구분합니까?

아니요. 출력은 기본적으로 대문자이며 ‘소문자’ 옵션을 켜면 소문자로 바뀝니다. 디코더는 한 문자열 안에 섞여 있더라도 둘 다 받아들입니다.

알파벳에 I, L, O, U가 없는 이유는 무엇입니까?

I와 L은 1과, O는 0과 혼동하기 쉬우므로 제외했으며, 디코딩할 때는 해당 숫자로 읽습니다. U는 무작위 코드가 불쾌한 영어 단어를 이룰 가능성을 줄이기 위해 제외했습니다.

이 도구는 Crockford 검사 기호를 지원합니까?
아니요. 사양은 37로 나눈 나머지 체크섬을 담는 선택적 추가 문자를 허용하며, 이 문자에는 추가 기호 * ~ $ = U가 쓰입니다. 이 도구는 검사 기호를 추가하거나 검증하지 않으므로, 디코딩하기 전에 검사 기호를 제거하십시오.
여기서 ULID를 디코딩할 수 있습니까?

정확한 16바이트로는 디코딩할 수 없습니다. ULID는 128비트를 남는 비트를 앞에 둔 하나의 숫자로 인코딩하지만, 이 도구는 바이트 묶음 단위로 처리하며 남는 비트를 끝에 둡니다. 타임스탬프와 무작위 부분을 읽으려면 ULID 라이브러리를 사용하십시오.