private const string Base36Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static string LongToBase(long value)
long targetBase = Base36Chars.Length;
char[] buffer = new char[Math.Max(
(int) Math.Ceiling(Math.Log(value + 1, targetBase)), 1)];
buffer[--i] = Base36Chars[(int)(value % targetBase)];
value = value / targetBase;
return new string(buffer, i, buffer.Length - i);
public static string LongToBaseReversed(long value)
long targetBase = Base36Chars.Length;
char[] buffer = new char[Math.Max(
(int) Math.Ceiling(Math.Log(value + 1, targetBase)), 1)];
buffer[i++] = Base36Chars[(int)(value % targetBase)];
value = value / targetBase;
return new string(buffer, 0, i);
public static void Main()
Random random = new Random();
Console.WriteLine(LongToBase(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()));
System.Threading.Thread.Sleep(random.Next(10, 500));
Console.WriteLine(LongToBaseReversed(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()));
System.Threading.Thread.Sleep(random.Next(10, 500));