public static void Main()
var billId = "bill-f71b7ec9-0ac7-4f73-a9eb-c81ef20ccb4f";
var guidString = billId.Replace("bill-", "");
Console.WriteLine("Getting shortId from {0}", guidString);
var shortGuid = new ShortGuid(Guid.Parse(guidString));
Console.WriteLine($"The ShortGuid, \"{shortGuid}\", has {shortGuid.ToString().Length} characters." );
var guidFromShortGuid = shortGuid.ToGuid();
Console.WriteLine($"The original Guid: {guidString}");
Console.WriteLine($"Guid translated from ShortGuid: {guidFromShortGuid}");
public static string GetShortId(string billId)
var myGuidString = billId.Replace("bill-", "");
return myGuidString.ToString();
public static Guid GetGuidFromShortId(string id)
private readonly Guid guid;
private readonly string value;
public ShortGuid(Guid guid)
throw new ArgumentNullException("guid");
this.value = Convert.ToBase64String(guid.ToByteArray())
public override string ToString()
public static ShortGuid Parse(string shortGuid)
throw new ArgumentNullException("shortGuid");
else if (shortGuid.Length != 22)
throw new FormatException("Input string was not in a correct format.");
return new ShortGuid(new Guid(Convert.FromBase64String
(shortGuid.Replace("_", "/").Replace("-", "+") + "==")));
public static implicit operator String(ShortGuid guid)
public static implicit operator Guid(ShortGuid shortGuid)