public static void Main()
ulong mac = Diffuse(serial);
Console.WriteLine(mac.ToString("X12"));
serial = InverseDiffuse(mac);
Console.WriteLine(serial);
public static ulong Diffuse(ulong serial)
val = (val + 1) & 0x00000FFFFFFFFFFF;
val = (val ^ (val >> 24));
val = (val * 740011) & 0x00000FFFFFFFFFFF;
val = (val ^ (val << 32)) & 0x00000FFFFFFFFFFF;
val = (val ^ (val >> 8));
val = (val * 740011) & 0x00000FFFFFFFFFFF;
val = (val ^ (val >> 24));
val |= 0x0000C00000000000;
public static ulong InverseDiffuse(ulong mac)
ulong val = mac & 0x00000FFFFFFFFFFF;
val = (val ^ (val >> 24));
val = (val * 7638794002435) & 0x00000FFFFFFFFFFF;
for (int i = 0; i < 5; i++)
val = (old ^ (val >> 8));
val = (val ^ (val << 32)) & 0x00000FFFFFFFFFFF;
val = (val * 7638794002435) & 0x00000FFFFFFFFFFF;
val = (val ^ (val >> 24));
val = (val - 1) & 0x00000FFFFFFFFFFF;