Base62 인코더 및 디코더

텍스트, 16진수 바이트, 파일을 Base62로 변환하고 다시 되돌립니다. 출력은 숫자와 영문자로만 이루어지므로 URL, 파일 이름, 식별자에 이스케이프 없이 안전하게 쓸 수 있습니다.

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

사용 방법

  1. 텍스트를 Base62로 바꾸려면 ‘인코딩’을, Base62를 텍스트로 되돌리려면 ‘디코딩’을 선택합니다.
  2. 사용하는 시스템에 맞는 ‘알파벳’ 순서를 선택합니다. 0-9 A-Z a-z(기본값)와 0-9 a-z A-Z 중에서 고를 수 있습니다.
  3. 내용을 입력하거나 붙여넣거나, ‘파일 열기’로 작은 파일(약 20KB까지)을 불러옵니다.
  4. 결과를 복사하거나 파일로 다운로드합니다.

Base62란?

Base62는 숫자 10개, 대문자 26개, 소문자 26개를 사용합니다. 영문자와 숫자만으로 만들 수 있는 가장 큰 알파벳이므로, 결과를 URL, 파일 이름, 데이터베이스 키, 코드 속 식별자에 이스케이프 없이 쓸 수 있습니다. 문자 하나가 약 5.95비트를 담으므로 출력은 입력의 약 1.34배가 됩니다. Base64에 버금갈 만큼 간결하면서도 +, /, =, -, _가 들어가지 않습니다.

62는 2의 거듭제곱이 아니므로, 이 도구는 Base58이나 Base36과 마찬가지로 입력 전체를 하나의 큰 수로 보고 62진법으로 변환합니다. 앞쪽의 0 바이트는 왕복 변환 후에도 남아 있도록 각각 앞자리의 0으로 표기합니다. 데이터가 크면 연산이 느려지므로 입력은 약 20KB로 제한됩니다.

단일한 Base62 표준은 없습니다

Base64와 달리 Base62에는 RFC가 없으며, 구현마다 다음과 같은 차이가 있어 출력이 서로 호환되지 않습니다.

  • 알파벳 순서. 이 도구는 0-9A-Za-z(기본값)와 0-9a-zA-Z를 제공합니다. 일부 라이브러리는 영문자를 숫자보다 앞에 둡니다.
  • 앞쪽의 0. 어떤 구현은 이 도구처럼 앞쪽의 0 바이트마다 0을 하나씩 남기고, 어떤 구현은 이를 버리며, 고정 길이 형식은 결과를 정해진 너비까지 채웁니다.
  • 인코딩 대상. 많은 Base62 함수는 바이트열이 아니라 데이터베이스 ID 같은 정수를 인코딩합니다. 데이터를 고정 크기 블록으로 나누어 처리하는 구현도 있습니다.

다른 시스템에서 받은 문자열을 여기서 디코딩했을 때 알아볼 수 없는 결과가 나온다면 다른 알파벳 옵션을 시도해 보십시오. 그래도 실패한다면 그 시스템은 다른 방식을 사용하고 있을 가능성이 높습니다.

Base62가 사용되는 곳

URL 단축 서비스는 자동 증가 ID를 짧은 코드로 바꿉니다. Base62 일곱 문자로 3조 5천억 개가 넘는 값을 표현할 수 있습니다. KSUID 같은 정렬 가능한 ID는 27자 고정 길이의 Base62 형식을 사용하며, 많은 서비스가 API 키와 토큰에 Base62를 사용합니다. 더블클릭 한 번으로 문자열 전체가 선택되고 어디에나 붙여넣을 수 있기 때문입니다. 정수 하나를 변환하려면 진법 변환기를 이용하거나 몇 줄의 코드를 작성하면 됩니다.

// JavaScript: 정수(BigInt)를 Base62로 변환
const A = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
function toBase62(n) {
  let s = '';
  do { s = A[Number(n % 62n)] + s; n /= 62n; } while (n > 0n);
  return s;
}
toBase62(123456789n);   // '8M0kX'

사양

알파벳0-9 A-Z a-z
출력 크기약 134%(큰 수 변환)
패딩없음
표준공식 표준 없음
대소문자 구분예

예시

입력 (UTF-8)출력
Hello, World!1wJfrzvdbtXUOlUjUf
Base64.isNWxjrFq4r3rv
你好19PqtKE1t

자주 묻는 질문

Base62는 URL에 안전합니까?
예. A-Z, a-z, 0-9만 사용하므로 URL에서 이스케이프할 필요가 전혀 없습니다. Base64URL도 URL에 안전하지만 - 와 _ 문자가 포함됩니다.
Base62 문자열이 엉뚱한 텍스트로 디코딩되는 이유는 무엇입니까?

Base62 구현은 알파벳 순서와 방식이 서로 다릅니다. 0-9A-Za-z 알파벳과 0-9a-zA-Z 알파벳을 바꿔 가며 시도해 보십시오. 둘 다 맞지 않는다면 그 문자열은 정수로부터 만들어졌거나 다른 알고리즘으로 생성되었을 가능성이 높습니다.

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

예. 대문자와 소문자는 서로 다른 값을 나타내므로 Base62 문자열을 대문자나 소문자로 변환해서는 안 됩니다.

Base62와 Base58 중 무엇을 사용해야 합니까?
Base58은 사람이 손으로 옮겨 적을 때 혼동하지 않도록 0, O, I, l을 제외합니다. Base62는 모든 영문자와 숫자를 사용하며 조금 더 짧습니다. 사람이 직접 입력하는 문자열에는 Base58을, 기계가 처리하는 문자열에는 Base62를 선택하십시오.