사용 방법
- 텍스트를 Base36으로 바꾸려면 ‘인코딩’을, Base36을 텍스트로 되돌리려면 ‘디코딩’을 선택합니다.
- 내용을 입력하거나 붙여넣거나 작은 파일(최대 약 20KB)을 엽니다.
- 출력에 대문자가 필요하면 ‘대문자’를 켭니다.
- 결과를 복사하거나 파일로 다운로드합니다.
Base36이란?
Base36은 숫자 10개와 라틴 알파벳 26자, 즉 0-9 다음에 a-z를 이어 붙인 알파벳으로 데이터를 표기합니다. 대소문자를 구분하지 않으면서 숫자와 문자로 만들 수 있는 가장 큰 알파벳이므로, Base36 문자열은 대소문자를 바꾸거나 무시하는 시스템에서도 손상되지 않습니다. 문자 하나가 약 5.17비트를 담으므로 출력은 입력의 약 1.55배로, Base32보다 조금 짧습니다.
36은 2의 거듭제곱이 아니므로 바이트를 비트 묶음으로 단순히 자를 수 없습니다. 대신 이 도구는 Base58과 같은 방식으로 입력 전체를 하나의 큰 부호 없는 정수로 읽어 36진법으로 변환합니다. 숫자로 바꾸면 앞쪽의 0 바이트가 사라지므로, 이런 바이트는 각각 앞자리 0으로 표기하고 디코딩할 때 복원합니다. 이 연산은 입력이 크면 느려지므로 최대 약 20KB까지만 받습니다.
Base36이 사용되는 곳
- 짧은 ID. URL 단축 서비스, 주문 번호, 티켓 코드는 숫자로 된 데이터베이스 ID를 36진법으로 표시하는 경우가 많습니다. 예를 들어 Reddit은 게시물과 댓글 ID에 36진법을 사용합니다.
- 대소문자를 구분하지 않는 환경. DNS 이름과 일부 파일 시스템은 대소문자를 무시합니다. IPFS가 서브도메인 게이트웨이 주소에서 일부 식별자를 Base36 형식으로 쓰는 것도 이 때문입니다.
- 코드 속의 숫자. 36은 대부분의 프로그래밍 언어가 정수 변환에서 기본으로 지원하는 가장 큰 진법입니다.
대소문자가 보존되고 가장 짧은 영숫자 문자열이 필요하다면 Base62가 더 간결합니다.
코드에서 36진수 다루기
이 페이지는 바이트를 인코딩합니다. 정수를 변환하려면 사용하는 언어의 내장 함수나 진법 변환기를 사용하십시오.
// JavaScript
(1000000).toString(36) // 'lfls'
parseInt('lfls', 36) // 1000000
123456789012345678901234567890n.toString(36) // 큰 값에는 BigInt 사용
# Python
int('lfls', 36) # 1000000
# 반대 방향으로 변환하는 내장 함수는 없음
parseInt는 Number.MAX_SAFE_INTEGER보다 큰 값에서 정밀도를 잃습니다. 더 큰 값은 각 자릿수를 BigInt에 직접 누적해 계산하십시오.
사양
| 알파벳 | 0-9 a-z |
|---|---|
| 출력 크기 | 약 155%(큰 수 변환) |
| 패딩 | 없음 |
| 표준 | 공식 표준 없음 |
| 대소문자 구분 | 아니요 |
예시
| 입력 (UTF-8) | 출력 |
|---|---|
Hello, World! | fg3h7vqw7een6jwwnzmp |
Base64.is | 76f8bz4veeatf7 |
你好 | 2h5exfqm65 |
자주 묻는 질문
Base36은 대소문자를 구분합니까?
아니요. 출력은 기본적으로 소문자이며 ‘대문자’ 옵션을 켜면 대문자로 바뀝니다. 디코더는 어느 쪽이든 받아들입니다.
다른 도구와 Base36 결과가 다른 이유는 무엇입니까?
Base36에는 공식 표준이 없습니다. 어떤 도구는 숫자를, 어떤 도구는 바이트를 인코딩하며, 앞쪽의 0 바이트를 처리하는 방식도 다릅니다. 이 도구는 입력 바이트를 하나의 큰 수로 인코딩하고, 앞쪽의 0 바이트는 각각 0으로 표기합니다.