使い方
- テキストを Base36 にするには「エンコード」を、Base36 をテキストに戻すには「デコード」を選択します。
- テキストを入力または貼り付けるか、小さなファイル(約 20 KB まで)を開きます。
- 出力に大文字が必要な場合は「大文字」をオンにします。
- 結果をコピーするか、ファイルとしてダウンロードします。
Base36 とは
Base36 は、10 個の数字とラテン文字 26 字、つまり 0-9 に続く a-z でデータを表します。大文字と小文字を区別せずに数字と英字だけで作れる最大のアルファベットなので、大文字と小文字を変換したり区別しなかったりするシステムでも Base36 の文字列はそのまま使えます。1 文字が約 5.17 ビットを表すため、出力は入力の約 1.55 倍のサイズになり、Base32 よりわずかに短くなります。
36 は 2 のべき乗ではないため、バイト列を単純にビット単位のグループに分けることはできません。代わりに、このツールは入力全体を 1 つの大きな符号なし整数として読み取り、36 進数に変換します。これは Base58 と同じ方法です。数値にすると先頭のゼロバイトが失われてしまうため、それぞれを先頭の 0 として書き出し、デコード時に復元します。この計算は入力が大きいと遅くなるため、受け付ける入力は約 20 KB までです。
Base36 の用途
- 短い ID。URL 短縮サービス、注文番号、チケットコードでは、データベースの数値 ID を 36 進数で表示することがよくあります。たとえば Reddit は、投稿やコメントの ID に 36 進数を使っています。
- 大文字と小文字を区別しない場所。DNS 名や一部のファイルシステムは、大文字と小文字を区別しません。このため IPFS は、サブドメイン形式のゲートウェイアドレスで一部の識別子を Base36 形式で表しています。
- コード内の数値。36 は、ほとんどのプログラミング言語が整数の変換で標準サポートしている最大の基数です。
大文字と小文字が保持され、できるだけ短い英数字の文字列が必要な場合は、よりコンパクトな Base62 を使いましょう。
コードで Base36 の数値を扱う
このページはバイト列をエンコードします。整数を変換するには、お使いの言語の組み込み関数か、基数変換ツールを使用してください。
// JavaScript
(1000000).toString(36) // 'lfls'
parseInt('lfls', 36) // 1000000
123456789012345678901234567890n.toString(36) // 大きな値には BigInt を使用
# Python
int('lfls', 36) # 1000000
# 逆方向の変換を行う組み込み関数はありません
parseInt は Number.MAX_SAFE_INTEGER を超えると精度が失われます。それより大きな値は、各桁を自分で BigInt に加算していく必要があります。
仕様
| 使用文字 | 0-9 a-z |
|---|---|
| 出力サイズ | 約 155%(多倍長整数による変換) |
| パディング | なし |
| 規格 | 正式な規格なし |
| 大文字と小文字の区別 | なし |
エンコード例
| 入力 (UTF-8) | 出力 |
|---|---|
Hello, World! | fg3h7vqw7een6jwwnzmp |
Base64.is | 76f8bz4veeatf7 |
你好 | 2h5exfqm65 |
よくある質問
Base36 は大文字と小文字を区別しますか?
いいえ。出力はデフォルトで小文字で、「大文字」オプションで大文字に切り替えられます。デコーダーはどちらも受け付けます。
別のツールと Base36 の結果が異なるのはなぜですか?
Base36 には正式な規格がありません。数値をエンコードするツールもあれば、バイト列をエンコードするツールもあり、先頭のゼロバイトの扱いも異なります。このツールは入力のバイト列を 1 つの大きな数としてエンコードし、先頭のゼロバイトをそれぞれ 0 として書き出します。