36^50 は約 2^258.5 なので、50 バイトの base-36 文字列に情報を格納できます。しかし、なぜ誰もがこれに base-36 を使用しなければならないのでしょうか。
各 GUID を 128 ビットの数値として扱い、それらを組み合わせて 256 ビットの数値にし、それを base-36 の「数値」に変換する必要があります。逆変換は、同じことを逆に行うことです。
Guid.ToByteArray
GUID を 16 バイト配列に変換します。両方の GUID に対してこれを行うと、32 バイト (256 ビット) の配列が得られます。その配列からaを構築し(コンストラクBigInt
ターがあります)、その数値をbase-36に変換するだけです。
数値を base-36 に変換するには、次のようにします (すべてが正であると仮定します)。
const string digits = "0123456789abcdefghijklmnopqrstuvwxyz";
string ConvertToBase36(BigInt number)
{
string result = "";
while(number > 0)
{
char digit = string[number % 36];
result += digit;
number /= 36;
}
}