using System.Globalization;
public static void Main()
var a = UidGenerator.NewGuid(98780853900912, 899975);
public static class UidGenerator
public static long NewUid(Guid guid)
byte[] guidByte = guid.ToByteArray();
for (int i = 0; i < 4; i++)
bin1 += guidByte[i].ToString("X").PadLeft(2, '0');
bin2 = guidByte[4].ToString("X").PadLeft(2, '0');
bin2 += guidByte[5].ToString("X").PadLeft(2, '0');
long data1 = long.Parse(bin1, NumberStyles.HexNumber);
long data2 = long.Parse(bin2, NumberStyles.HexNumber);
return (data2 * mult * mult) + data1;
public static long NewUid()
return NewUid(Guid.NewGuid());
public static string NewUidString(Guid guid)
return NewUid(guid).ToString().PadRight(20);
public static string NewUidString()
return NewUidString(Guid.NewGuid());
public static Guid NewGuid(long? uid, int? clientId)
if (!uid.HasValue || !clientId.HasValue)
byte[] bytes = new byte[16];
BitConverter.GetBytes(uid.Value).CopyTo(bytes, 0);
BitConverter.GetBytes(clientId.Value).CopyTo(bytes, 12);
public static Tuple<long, int> ParseGuid(Guid id)
byte[] gb = id.ToByteArray();
long empUid = BitConverter.ToInt64(gb, 0);
int clientId = BitConverter.ToInt32(gb, 12);
return new Tuple<long, int>(empUid, clientId);