记录一下
public static class GuidTick
{
private static long Ticks = 0L;
private static byte Count = byte.MinValue;
private static Dictionary<int, int> dic = new Dictionary<int, int>()
{
{0,15 },
{1,14 },
{2,13 },
{3,12 },
{4,11 },
{5,10 },
{6,9 },
{7,8 },
{8,6 },
{9,7 },
{10,4 },
{11,5 },
{12,0 },
{13,1 },
{14,2 },
{15,3 },
};
private static void AddOne(ref byte[] bs, int index)
{
if (index < 0) return;
if (bs[index] == byte.MaxValue)
{
bs[index] = 0;
AddOne(ref bs, index - 1);
}
else
{
bs[index]++;
}
}
public static Guid GetGuid()
{
var t = DateTime.UtcNow.Ticks;
if (t != Ticks)
{
Ticks = t;
Count = byte.MinValue;
}
var bs = new byte[16];
for (int i = 0; i < bs.Length; i++)
{
bs[i] = (byte)(t / Math.Pow(10, bs.Length - i) % 100);
}
if (Count == byte.MaxValue)
{
AddOne(ref bs, bs.Length - 1);
}
else
{
bs[15] += Count;
}
Count++;
var val = new byte[16];
foreach (var item in dic)
{
val[item.Key] = bs[item.Value];
}
return new Guid(val);
}
}