UTILS.
100% ブラウザ内で完結
🔢

Base62 エンコード&デコード

整数やバイト列を、コンパクトで URL セーフな Base62(0-9A-Za-z)との間で相互変換します。BigInt 対応、GMP アルファベットバリアント付き、すべてブラウザ内。

— ここに結果が表示されます —

このツールについて

Base62 ツールは、数値やバイト列をコンパクトな 62 記号のアルファベット 0-9A-Za-z にエンコードし、また元に戻します。Base62 は、Base64 が使う +、/、= の文字を含まず URL セーフを保つため、短縮 ID、URL スラッグ、短縮リンクで人気があります。すべての変換は JavaScript BigInt を使ってブラウザ内でローカルに実行されるため、任意の大きさの値も正確に扱え、何もアップロードされません。

整数モードでは入力を任意精度の整数(10 進数、または 0x 接頭辞付きの 16 進数)として扱います。エンコードは繰り返し 62 で割って alphabet[remainder] を先頭に付加し、デコードは Σ alphabet.indexOf(ch)·62^position を計算します。バイトモードでは入力バイト(UTF-8 テキストまたは 16 進数)を 1 つのビッグエンディアンの多倍長数として扱い、同じ 62 進変換を適用しますが、Bitcoin-Base58 方式で先頭のゼロバイトも保持します。各先頭 0x00 バイトは 1 個の先頭 '0' 文字になるため、往復変換が可逆になります。

標準アルファベットは数字、大文字、小文字の順(0-9A-Za-z)です。一部のライブラリ、特に GMP をベースにしたものは、数字、小文字、大文字の順(0-9a-zA-Z)で、同じ値でも異なる出力になります。アルファベットの切り替えで、お使いのシステムに合わせられます。方向、整数またはバイトモード、バイトの入力形式、アルファベットバリアントを選びます。

よくある質問

整数モードとバイトモードの違いは何ですか?
整数モードは、単一の任意精度の数値(10 進数または 0x-16 進数)を Base62 文字列に変換し、また 10 進整数に戻します。バイトモードは、バイト列(UTF-8 テキストまたは 16 進数から)をビッグエンディアンの多倍長数として変換し、先頭のゼロバイトを先頭のアルファベットゼロ文字として保持するため、バイナリデータが正確に往復します。
なぜ 2 つのアルファベットがあるのですか?
標準アルファベットは 0-9A-Za-z(大文字が小文字より前)です。GMP ベースのライブラリは 0-9a-zA-Z(小文字が大文字より前)を使います。同じ値でもそれぞれ異なるエンコードになるため、切り替えによって他のツールが期待するどちらの順序とも相互運用できます。
どれくらい大きな数値を扱えますか?
任意のサイズです。このツールは JavaScript BigInt を使うため 2^53 の精度制限がなく、任意の長さの整数やバイト列を正確にエンコード・デコードできます。これはハッシュ、UUID、長い識別子に不可欠です。
バイトモードでは先頭のゼロはどう扱われますか?
各先頭 0x00 バイトは、1 個の先頭アルファベットゼロ文字(Base58 の先頭 '1' のように)としてエンコードされます。デコード時、各先頭アルファベットゼロ文字が 1 個の 0x00 バイトを復元するため、エンコードしてからデコードすると元のバイト列が正確に返ります。

その他のツール