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

Base62 인코더 및 디코더

텍스트를 입력하면 많은 단축 URL과 ID에 쓰이는 숫자+영문자 인코딩 Base62가 나옵니다. Base62에는 표준 알파벳 순서가 하나로 정해져 있지 않으니 라이브러리가 쓰는 0-9 A-Z a-z나 0-9 a-z A-Z 중에서 고르세요.

무료 가입 없음, 제한 없음 로컬 업로드 없음 알파벳 2종 0-9A-Za-z와 0-9a-zA-Z 업데이트 2026. 10. 27.
입력 0바이트 0 B출력 0

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

Base62 인코딩과 디코딩 방법

  1. 입력 · 텍스트에 텍스트를 입력하거나 붙여넣으세요. 출력 · Base62에 Base62 문자열이 나타납니다.
  2. 출력 아래 알파벳을 연동할 시스템에 맞춰 0-9 A-Z a-z나 0-9 a-z A-Z로 설정하세요.
  3. 숫자 ID라면 변환 전을 정수 (큰 수) 로 바꾸고 10진수로 입력하세요. 원시 바이트라면 Hex나 Base64를 고르세요.
  4. 디코딩하려면 방향 전환에서 Base62 → 텍스트를 누르세요. 그러면 알파벳 선택이 입력 아래로 옮겨지며, 인코딩할 때 쓴 것과 같아야 합니다.

결과가 달라지는 두 가지 알파벳 순서

Base62에는 RFC가 없고, 실제로는 62개 문자가 두 가지 순서로 쓰입니다. 이 변환기는 둘 다 제공합니다.

알파벳A의 값a의 값Hello숫자 1000000
0-9 A-Z a-z10365TP3P3v4C92
0-9 a-z A-Z36105tp3p3V4c92

첫 번째 순서는 ASCII 순서를 따르므로, 길이가 같은 인코딩 문자열은 수와 같은 순서로 정렬됩니다. GMP가 37진법부터 62진법까지 이 순서를 씁니다. 두 번째 순서는 16진수의 소문자 a-f를 확장했을 때 얻는 순서와 같으며, 일부 라이브러리는 이를 “반전된” 알파벳이라고 부릅니다.

한 출력은 다른 출력에서 모든 영문자의 대소문자를 뒤집은 것입니다. 그래서 실수를 알아채기 어렵습니다. 5tp3p3V를 잘못된 순서로 디코딩해도 성공하지만, Hello 대신 바이트 4e 08 14 29 1d가 나옵니다. 디코딩한 값이 깨져 보이면 데이터를 의심하기 전에 다른 순서를 시도해 보세요.

짧은 ID와 URL을 위한 Base62

URL 단축 서비스와 ID 체계가 Base62를 쓰는 이유는 모든 문자가 URL 경로, 파일 이름, 더블클릭 선택에서 안전하고 결과가 짧기 때문입니다. 데이터베이스 ID는 수이므로 정수 (큰 수) 에서 인코딩하세요.

10진수Base62 (0-9A-Za-z)
12521
3843zz
3844100
10000004C92
1234567898M0kX

7자면 62^7 − 1, 약 3조 5천억까지의 수를 담습니다. 무작위 ID라면 무작위 바이트를 인코딩하세요. 16바이트 UUID는 hex로 32자지만 Base62로는 21자나 22자가 됩니다.

짧은 순차 ID는 레코드가 몇 개인지 드러내고 추측하기 쉽습니다. 그게 문제라면 카운터 대신 무작위 바이트를 인코딩하세요.

Base62가 바이트와 앞쪽 0을 다루는 방법

62는 2의 거듭제곱이 아니므로 Base62는 비트 묶음을 문자에 대응시킬 수 없습니다. 입력을 하나의 빅 엔디언 수로 읽어 62진법으로 변환합니다. 앞쪽 0 바이트는 사라질 수 있으므로 이 도구는 0 바이트마다 숫자 0을 하나씩 씁니다. 바이트 00 00은 00으로, 00 ff는 047로 인코딩됩니다.

여기서도 라이브러리마다 다릅니다. 많은 라이브러리가 수만 인코딩하고 앞쪽 0을 버리며, 고정 폭 형식은 정해진 길이까지 채웁니다. 받는 쪽이 고정 폭을 기대한다면 출력 왼쪽을 0으로 채우세요. 큰 수 방식은 입력 길이의 제곱에 비례해 비용이 커지므로, 이 도구는 Base62 입력을 64 KB로 제한합니다.

Python에서 Base62

Python 표준 라이브러리에는 Base62가 없습니다. 정수 ID라면 몇 줄이면 변환할 수 있습니다.

ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

def b62encode(n: int) -> str:
    if n == 0:
        return ALPHABET[0]
    out = ""
    while n:
        n, r = divmod(n, 62)
        out = ALPHABET[r] + out
    return out

def b62decode(s: str) -> int:
    n = 0
    for ch in s:
        n = n * 62 + ALPHABET.index(ch)
    return n

b62encode(1000000)    # '4C92'
b62decode("8M0kX")    # 123456789

다른 순서를 쓰려면 ALPHABET의 두 영문자 블록을 맞바꾸세요. 바이트는 먼저 int.from_bytes(data, "big")로 변환하세요. 바이트 처리는 Python에서 더 다룹니다.

자주 묻는 질문

Base62 알파벳은 무엇인가요?

숫자 10개와 대문자 26개, 소문자 26개, 모두 62개 문자이며 그 밖에는 없습니다. 숫자가 항상 먼저 오지만, 그다음에 대문자(0-9A-Za-z)가 오는지 소문자(0-9a-zA-Z)가 오는지는 라이브러리마다 다릅니다.

Base62와 Base64의 차이는 무엇인가요?

Base64는 +와 /(또는 -와 _), = 패딩을 더하고 고정된 6비트 묶음을 대응시킵니다. Base62는 영문자와 숫자만 써서 어디서도 이스케이프가 필요 없지만, 62가 2의 거듭제곱이 아니어서 데이터를 하나의 큰 수로 다뤄야 합니다. 출력은 Base64보다 약 1% 깁니다.

숫자를 Base62로 인코딩하려면 어떻게 하나요?

변환 전을 정수 (큰 수) 로 설정하고 10진수를 입력하세요. 기본 알파벳에서 1000000은 4C92가 됩니다. 숫자를 텍스트로 인코딩하면 숫자 문자 자체가 인코딩됩니다.

Base62는 대소문자를 구분하나요?

네. A와 a는 서로 다른 숫자이며, 기본 순서에서 각각 10과 36입니다. URL이나 ID를 소문자로 바꾸는 시스템은 Base62 문자열을 망가뜨리므로, 대소문자가 사라질 수 있다면 Base36을 쓰세요.