Ejemplo n.º 1
0
        static void Main1(string[] args)
        {
            var uid      = Guid.NewGuid();
            var uidBytes = uid.ToByteArray();

            var base32 = Base32.Encode(uidBytes);
            var base64 = Convert.ToBase64String(uidBytes);

            Console.WriteLine($"base16 : {uid:n}");
            Console.WriteLine($"base32 : {base32}");
            Console.WriteLine($"base64 : {base64}");


            var fromBase32 = new Guid(Base32.Decode(base32));
            var fromBase64 = new Guid(Convert.FromBase64String(base64));

            Console.WriteLine();
            Console.WriteLine($"====== And back ======");
            Console.WriteLine();

            Console.WriteLine($"original     : {uid:n}");
            Console.WriteLine($"from base32  : {fromBase32:n}");
            Console.WriteLine($"from base64  : {fromBase64:n}");

            Console.WriteLine();
            Console.WriteLine($"====== With checksum digit ======");
            Console.WriteLine();

            Console.WriteLine(AddChecksum("pay" + base32));
            Console.WriteLine(AddChecksum("evt" + base32));
            Console.WriteLine(AddChecksum("wbh" + base32));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Proof of concept implementation of the checksum algorithm as proposed in
        /// Crockford's base32.Note there's certainly more efficient ways of doing this ...
        /// </summary>
        /// <param name="base32"></param>
        /// <returns></returns>
        static string AddChecksum(string base32)
        {
            var payBytes = Base32.Decode(base32);

            var bigInt    = new System.Numerics.BigInteger(payBytes);
            var remainder = bigInt % 37;

            if (remainder.Sign < 0)
            {
                remainder += 37;
            }

            var checksumDigits = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567*~$9".ToLower().ToCharArray();
            var checksumDigit  = checksumDigits[(byte)remainder];

            return(base32 + checksumDigit);
        }
Ejemplo n.º 3
0
 public static Guid FromBase32(string base32)
 => new Guid(Base32.Decode(base32));