Unique Id Generation !!!

A short while I was engaged in a little project where I had to interact with a third party service provider who required a (30 length) unique id as part of the transaction. I am little dumb and am used to GUIDs for a long time when it comes to unique ids. But GUIDs are more than 30 in length. I was trying out some stupid ways like stripping out the trail part of the GUID to make 30 length unique but my intuition wasn’t convinced about the tricks I was working out.

Finally, Sriram helped me with it. I am sharing his code for the benefit of others.

string GenerateUniqueId(int length)
{
   string asciiChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
   char[] chars = asciiChars.ToCharArray();
   byte[] randombytes = new byte[length];

   RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
   crypto.GetNonZeroBytes(randombytes);
   StringBuilder result = new StringBuilder(length);

   foreach (byte b in randombytes)
   {
      result.Append(chars[b % asciiChars.Length]);
   }

   return result.ToString();
}

Thanks Sriram.