using System.Globalization;
public static void Main()
Console.WriteLine(Base36Decode("US"));
Console.WriteLine(Base36Encode(BigInteger.Parse("21911885219510514611218817625320142242185240")));
for (int i = 0; i < (Clist.Length*4); i++)
Console.Write(i+"["+Base36Encode((ulong)i)+"] ");
if ((i + 1) % 36 == 0) Console.WriteLine();
private const string Clist = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static readonly char[] Clistarr = Clist.ToCharArray();
public static long Base36Decode(string inputString)
inputString = inputString.ToUpperInvariant();
for (var i = inputString.Length - 1; i >= 0; i--) {
var pos = Clist.IndexOf(c);
result += pos * (long)Math.Pow(Clist.Length, pow);
public static string Base36Encode(BigInteger inputNumber)
var sb = new StringBuilder();
int i = (int)(inputNumber % (ulong)Clist.Length);
inputNumber /= (ulong)Clist.Length;
} while (inputNumber != 0);
return Reverse(sb.ToString());
public static string Reverse(string s)
var charArray = s.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);