Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

guid to base64, for URL

Question: is there a better way to do that?

VB.Net

Function GuidToBase64(ByVal guid As Guid) As String     Return Convert.ToBase64String(guid.ToByteArray).Replace("/", "-").Replace("+", "_").Replace("=", "") End Function  Function Base64ToGuid(ByVal base64 As String) As Guid     Dim guid As Guid     base64 = base64.Replace("-", "/").Replace("_", "+") & "=="      Try         guid = New Guid(Convert.FromBase64String(base64))     Catch ex As Exception         Throw New Exception("Bad Base64 conversion to GUID", ex)     End Try      Return guid End Function 

C#

public string GuidToBase64(Guid guid) {     return Convert.ToBase64String(guid.ToByteArray()).Replace("/", "-").Replace("+", "_").Replace("=", ""); }  public Guid Base64ToGuid(string base64) {    Guid guid = default(Guid);    base64 = base64.Replace("-", "/").Replace("_", "+") + "==";     try {        guid = new Guid(Convert.FromBase64String(base64));    }    catch (Exception ex) {        throw new Exception("Bad Base64 conversion to GUID", ex);    }     return guid; } 
like image 977
Fredou Avatar asked Jun 23 '09 12:06

Fredou


People also ask

Is Base64 a GUID?

Base64-encoded GUIDs only take 22 bytes, and are no harder to type/remember than regular GUIDs. Base64-encoded GUIDs also an option in the Online GUID/UUID Generator.

Can Base64 be used in URL?

Base64 is a group of binary-to-text encoding schemes that represent binary data in an ASCII string format by translating it into a radix-64 representation. By consisting only of ASCII characters, base64 strings are generally url-safe, and that's why they can be used to encode data in Data URLs.

What characters are allowed in Base64?

Base64 only contains A–Z , a–z , 0–9 , + , / and = . So the list of characters not to be used is: all possible characters minus the ones mentioned above. For special purposes .


1 Answers

You might want to check out this site: http://prettycode.org/2009/11/12/short-guid/

It looks very close to what you're doing.

public class ShortGuid {     private readonly Guid guid;     private readonly string value;      /// <summary>Create a 22-character case-sensitive short GUID.</summary>     public ShortGuid(Guid guid)     {         if (guid == null)         {             throw new ArgumentNullException("guid");         }          this.guid = guid;         this.value = Convert.ToBase64String(guid.ToByteArray())             .Substring(0, 22)             .Replace("/", "_")             .Replace("+", "-");     }      /// <summary>Get the short GUID as a string.</summary>     public override string ToString()     {         return this.value;     }      /// <summary>Get the Guid object from which the short GUID was created.</summary>     public Guid ToGuid()     {         return this.guid;     }      /// <summary>Get a short GUID as a Guid object.</summary>     /// <exception cref="System.ArgumentNullException"></exception>     /// <exception cref="System.FormatException"></exception>     public static ShortGuid Parse(string shortGuid)     {         if (shortGuid == null)         {             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)     {         return guid.ToString();     }      public static implicit operator Guid(ShortGuid shortGuid)     {         return shortGuid.guid;     } } 
like image 124
JamesBrownIsDead Avatar answered Oct 13 '22 00:10

JamesBrownIsDead