C#
Guid.NewGuid().ToString();
32 characters
AAD5E2E7-AD78-487A-9B37-458B9F1EE897
Convert.ToBase64String(Guid.NewGuid().ToByteArray())
.Substring(0, 22).Replace("/", "_").Replace("+", "-");
22 characters
b14I850fIE6cuyv7VnP6WA
Base64 code encoding is convenient but not optimal, since it is using only 64 codes out of 95 view-able available in ASCII, and is using '/' and '+' that are not URL friendly.
It is using 6 out of 8 bits in a byte, so overhead compared to binary is 22/16 (37%).
It is still better than typical hex format that takes 32 bytes instead of binary 16 (100% overhead).
Since whole bytes are used, 22 final bytes can hold 132 bits,
and GUID is 16 bytes = 128 bits, so there is a 4 extra bits that could be used for checksum.