파일 업로드
  1. base64hub
  2. 기타 진법
  3. Base36

Base36 인코더, 디코더, 변환기

텍스트를 입력하면 대소문자를 구분하지 않는 숫자+영문자 인코딩인 Base36이 나옵니다. 입력을 정수 (큰 수) 로 바꾸면 크기에 상관없이 10진수를 Base36으로, 또 반대로 변환합니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 반올림 없음 64 KB까지의 BigInt 수 업데이트 2026. 10. 27.
입력 0바이트 0 B출력 0

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

Base36 변환기 사용 방법

  1. 입력 · 텍스트에 텍스트를 입력하세요. UTF-8 바이트가 인코딩되어 출력 · Base36에 결과가 나타납니다.
  2. 출력 아래 대소문자에서 소문자나 대문자를 고르세요. 어느 쪽이든 디코딩 결과는 같습니다.
  3. 숫자를 변환하려면 변환 전을 정수 (큰 수) 로 설정하고 10진수 값을 입력하세요. 변환 후를 바꿨다면 다시 Base36으로 설정하세요.
  4. 디코딩하려면 방향 전환에서 Base36 → 텍스트를 누르거나, 10진수를 얻으려면 변환 후를 정수 (큰 수) 로 설정하세요.

Base36과 10진수 사이의 변환

Base36은 0–9에 이어 a–z로 수를 세므로 a는 10, z는 35입니다. 각 자리는 오른쪽 자리의 36배 값을 가집니다.

Base3610진수비고
z35한 자리 중 가장 큰 수
1036
zz129535 × 36 + 35
10004665636³
21i3v9123456789
2gosa7pa2gv9007199254740991JavaScript의 Number.MAX_SAFE_INTEGER
3w5e11264sgsf184467440737095516152^64 − 1

변환기는 BigInt로 동작하므로 64비트와 128비트 값도 정확하게 나옵니다. 입력 한도는 64 KB로, 어떤 ID보다도 훨씬 큽니다.

Base36이 쓰이는 곳

Base36은 짧아야 하고 대소문자를 바꾸는 시스템을 통과해야 하는 식별자에 잘 맞습니다. 일부 소프트웨어가 소문자로 바꾸는 URL, 대소문자를 구분하지 않는 파일 시스템, 소리 내어 읽거나 종이를 보고 입력하는 코드가 그렇습니다. Reddit의 게시물과 댓글 ID가 한 예입니다. 또한 대부분의 프로그래밍 언어는 라이브러리 없이 Base36 수를 읽을 수 있습니다.

다른 방식과 비교하면 Base36은 대소문자 무관함을 얻는 대신 밀도를 조금 포기합니다. 무작위 16바이트는 Base36으로 24자나 25자, Base62로 21자나 22자, hex로 32자입니다. Base62는 더 짧지만 대소문자를 구분하고, Base32도 대소문자를 구분하지 않지만 알파벳을 5비트 묶음에 고정하고 패딩을 더합니다.

텍스트, 바이트, 앞쪽의 0

텍스트와 기타 바이트의 경우 변환기는 입력을 하나의 빅 엔디언 수로 읽고 그 수를 36진법으로 씁니다. Hello는 바이트 48 65 6c 6c 6f이고, 수로는 310939249775, Base36으로는 3yud78mn입니다. 앞쪽의 0 바이트는 순수한 수에서는 사라지므로 각각 숫자 0으로 씁니다. 바이트 00 0a는 0a로 인코딩됩니다.

정수 입력에는 앞쪽 0 문제가 없습니다. 10진수에는 잃어버릴 앞쪽 0 바이트가 없기 때문입니다.

JavaScript와 Python에서 Base36

두 언어 모두 수를 기본으로 변환할 수 있습니다.

(255).toString(36);           // '73'
parseInt("73", 36);           // 255
(2n ** 64n - 1n).toString(36) // '3w5e11264sgsf'

BigInt는 36진법으로 출력할 수는 있지만 파서가 없고, parseInt는 2^53을 넘으면 정밀도를 잃습니다. 짧은 반복문으로 해결할 수 있습니다.

function parseBase36(s) {
  let n = 0n;
  for (const ch of s.toLowerCase()) n = n * 36n + BigInt(parseInt(ch, 36));
  return n;
}
parseBase36("3w5e11264sgsf"); // 18446744073709551615n

Python의 int()는 진법을 인자로 받고 크기에 상관없이 동작합니다. int("3w5e11264sgsf", 36)은 18446744073709551615를 돌려줍니다. 반대 방향의 내장 함수는 없지만, 알파벳 0123456789abcdefghijklmnopqrstuvwxyz와 divmod 반복문으로 만들 수 있습니다. 더 많은 패턴은 JavaScript와 Python 페이지에 있습니다.

자주 겪는 문제

  • 값 안의 -, _, 공백에서 오류가 납니다. Base36에는 숫자와 영문자만 있습니다. 구분자를 지우거나, 여러 ID를 나누는 구분자라면 그 위치에서 값을 나누세요.
  • 디코딩한 텍스트가 깨집니다. 그 문자열은 인코딩된 텍스트가 아니라 숫자 ID였을 가능성이 높습니다. 변환 후를 정수 (큰 수) 로 설정해 수로 보세요.
  • 스프레드시트나 JSON에서 마지막 자릿수가 조금 다릅니다. 어딘가에서 수가 double을 거쳤습니다. 큰 ID는 처음부터 끝까지 문자열로 다루세요.

자주 묻는 질문

Base36을 10진수로 바꾸려면 어떻게 하나요?

변환 전을 Base36으로, 변환 후를 정수 (큰 수) 로 설정한 뒤 Base36 값을 붙여넣으세요. zz는 1295가 되고, 3w5e11264sgsf는 부호 없는 64비트 최댓값인 18446744073709551615가 됩니다.

Base36은 대소문자를 구분하나요?

아니요. 대문자와 소문자는 같은 값이므로 ZZ와 zz는 둘 다 1295입니다. 그래서 Base36은 대소문자가 바뀌어도 살아남는 흔한 인코딩 중 가장 밀도가 높습니다.

JavaScript parseInt는 왜 다른 숫자를 돌려주나요?

parseInt(s, 36)은 double을 돌려주는데, double은 2^53까지만 정확합니다. parseInt("3w5e11264sgsf", 36)은 385만큼 틀린 18446744073709552000을 돌려줍니다. 이 페이지에 나온 것처럼 BigInt로 파싱하세요.

Hello의 Base36은 왜 parseInt('Hello', 36)과 다른가요?

인코더는 텍스트의 5바이트를 하나의 수로 바꾼 뒤 그 수를 36진법으로 씁니다(3yud78mn). parseInt는 H-e-l-l-o라는 글자를 Base36 숫자로 읽어 29234652를 돌려줍니다.