コード例 #1
0
        public static Guid Create(DateTime secureTimestamp, SequentialGuidTypes type)
        {
            byte[] randomBytes = new byte[10];
            RandomGenerator.GetBytes(randomBytes);

            long timestamp = secureTimestamp.Ticks / 1_000L;

            byte[] timestampBytes = BitConverter.GetBytes(timestamp);

            BitConverter.IsLittleEndian.IfTrue(timestampBytes.Reverse);

            byte[] guidBytes = new byte[16];

            switch (type)
            {
            case SequentialGuidTypes.SequentialAsString:
            case SequentialGuidTypes.SequentialAsBinary:
                timestampBytes.BlockCopy(2, guidBytes, 0, 0);
                randomBytes.BlockCopy(0, guidBytes, 6, 10);

                if (type == SequentialGuidTypes.SequentialAsString && BitConverter.IsLittleEndian)
                {
                    guidBytes.Reverse(0, 4);
                    guidBytes.Reverse(4, 2);
                }

                break;

            case SequentialGuidTypes.SequentialAsEnd:
                randomBytes.BlockCopy(0, guidBytes, 0, 10);
                timestampBytes.BlockCopy(2, guidBytes, 10, 6);
                break;
            }

            return(new Guid(guidBytes));
        }
コード例 #2
0
 public static Guid Create(SequentialGuidTypes type, NoRepeatMode mode)
 => Create(mode == NoRepeatMode.On ? NoRepeatTimeStampManager.GetFactory().GetUtcTimeStamp() : DateTime.UtcNow, type);
コード例 #3
0
 public static Guid Create(SequentialGuidTypes type)
 => Create(DateTime.UtcNow, type);