Ejemplo n.º 1
0
 public Guid GetGuid(GuidTypes guidType)
 {
     if (mGuidMap.ContainsKey(guidType))
     {
         return(mGuidMap[guidType]);
     }
     return(Guid.Empty);
 }
Ejemplo n.º 2
0
        private Guid NewGuid(GuidTypes guidType)
        {
            try
            {
                using (var random = RandomNumberGenerator.Create())
                {
                    var randomBytes = new byte[10];

                    random.GetBytes(randomBytes);

                    var timestamp      = DateTime.UtcNow.Ticks / 10000L;
                    var timestampBytes = BitConverter.GetBytes(timestamp);

                    if (BitConverter.IsLittleEndian)
                    {
                        Array.Reverse(timestampBytes);
                    }

                    var bytes = new byte[16];

                    switch (guidType)
                    {
                    case GuidTypes.Oracle:
                        Buffer.BlockCopy(timestampBytes, 2, bytes, 0, 6);
                        Buffer.BlockCopy(randomBytes, 0, bytes, 6, 10);
                        break;

                    case GuidTypes.Postgres:
                    case GuidTypes.MySql:
                        Buffer.BlockCopy(timestampBytes, 2, bytes, 0, 6);
                        Buffer.BlockCopy(randomBytes, 0, bytes, 6, 10);

                        if (BitConverter.IsLittleEndian)
                        {
                            Array.Reverse(bytes, 0, 4);
                            Array.Reverse(bytes, 4, 2);
                        }
                        break;

                    case GuidTypes.SqlServer:
                        Buffer.BlockCopy(randomBytes, 0, bytes, 0, 10);
                        Buffer.BlockCopy(timestampBytes, 2, bytes, 10, 6);
                        break;

                    default:
                        return(Guid.Empty);
                    }

                    return(new Guid(bytes));
                }
            }
            catch
            {
                return(Guid.Empty);
            }
        }