Base62 エンコーダー・デコーダー

テキスト、16進数のバイト列、ファイルを Base62 に変換し、元に戻します。出力は数字と英字だけで構成されるため、URL、ファイル名、識別子にエスケープなしでそのまま使えます。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. テキストを Base62 に変換するには「エンコード」を、Base62 をテキストに戻すには「デコード」を選択します。
  2. 使用するシステムに合わせて「アルファベット」の順序を選択します。0-9 A-Z a-z(デフォルト)または 0-9 a-z A-Z です。
  3. データを入力または貼り付けるか、小さなファイル(約 20 KB まで)を開きます。
  4. 結果をコピーするか、ファイルとしてダウンロードします。

Base62 とは

Base62 は、10 個の数字、26 個の大文字、26 個の小文字を使います。英字と数字だけで構成できる最大のアルファベットなので、結果を URL、ファイル名、データベースのキー、コード内の識別子に使ってもエスケープは必要ありません。1 文字で約 5.95 ビットを表すため、出力は入力の約 1.34 倍になります。Base64 とほぼ同じくらいコンパクトですが、+、/、=、-、_ は含みません。

62 は 2 のべき乗ではないため、このツールは Base58 や Base36 と同様に、入力全体を 1 つの大きな数として扱い、62 進数に変換します。先頭のゼロバイトは、往復変換で失われないよう、それぞれ先頭の 0 として書き出します。データが大きいと計算が遅くなるため、入力は約 20 KB に制限されています。

Base62 には統一された規格がない

Base64 とは異なり、Base62 には RFC がありません。実装ごとに次のような違いがあり、出力に互換性がありません。

  • アルファベットの順序。このツールでは 0-9A-Za-z(デフォルト)と 0-9a-zA-Z を選べます。英字を数字の前に置くライブラリもあります。
  • 先頭のゼロ。このツールのように先頭のゼロバイト 1 つにつき 0 を 1 つ残す実装もあれば、削除する実装もあります。固定長の形式では、結果を決まった桁数まで埋めます。
  • エンコードの対象。多くの Base62 関数は、バイト列ではなく、データベースの ID などの整数をエンコードします。データを固定サイズのブロックに分割する実装もあります。

他のシステムで作られた文字列をここでデコードして意味のない結果になる場合は、もう一方のアルファベットを試してください。それでもうまくいかない場合、そのシステムは別の方式を使っていると考えられます。

Base62 の用途

URL 短縮サービスは、自動採番の ID を短いコードに変換します。Base62 の 7 文字で 3.5 兆を超える値を表せます。KSUID のようなソート可能な ID は 27 文字固定の Base62 形式を使います。また、ダブルクリックで文字列全体を選択でき、どこにでも貼り付けられるため、多くのサービスが API キーやトークンに Base62 を使っています。1 つの整数を変換するには、進数変換ツールを使うか、次のような数行のコードを書きます。

// 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 を選ぶとよいでしょう。