사용 방법
- 텍스트를 Base62로 바꾸려면 ‘인코딩’을, Base62를 텍스트로 되돌리려면 ‘디코딩’을 선택합니다.
- 사용하는 시스템에 맞는 ‘알파벳’ 순서를 선택합니다. 0-9 A-Z a-z(기본값)와 0-9 a-z A-Z 중에서 고를 수 있습니다.
- 내용을 입력하거나 붙여넣거나, ‘파일 열기’로 작은 파일(약 20KB까지)을 불러옵니다.
- 결과를 복사하거나 파일로 다운로드합니다.
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.is | NWxjrFq4r3rv |
你好 | 19PqtKE1t |
자주 묻는 질문
Base62는 URL에 안전합니까?
Base62 문자열이 엉뚱한 텍스트로 디코딩되는 이유는 무엇입니까?
Base62 구현은 알파벳 순서와 방식이 서로 다릅니다. 0-9A-Za-z 알파벳과 0-9a-zA-Z 알파벳을 바꿔 가며 시도해 보십시오. 둘 다 맞지 않는다면 그 문자열은 정수로부터 만들어졌거나 다른 알고리즘으로 생성되었을 가능성이 높습니다.
Base62는 대소문자를 구분합니까?
예. 대문자와 소문자는 서로 다른 값을 나타내므로 Base62 문자열을 대문자나 소문자로 변환해서는 안 됩니다.