public static void Main()
Console.WriteLine (CalculateWiegandCardNumber(facilityCode, cardNumber));
private static int CalculateWiegandCardNumber(int facilityCode, int cardNumber)
int CARDMASK = (int)(Math.Pow(2, 12) - 1);
if (facilityCode < 0 || facilityCode > 255)
throw new ArgumentException("Facility Code is not within the range 0 - 255.");
if (cardNumber < 0 || cardNumber > 65535)
throw new ArgumentException("Card Number is not within the range 0 - 65535.");
int wiegandCardNumber = (facilityCode << 16) + cardNumber;
bool evenParity = CalculateEvenParity(wiegandCardNumber >> 12);
bool oddParity = !CalculateEvenParity(wiegandCardNumber & CARDMASK);
return (evenParity ? 1 << 25 : 0) + (wiegandCardNumber << 1) + (oddParity ? 1 : 0);
private static bool CalculateEvenParity (int number)
number -= (number >> 6) << 6;
number -= (number >> 3) << 3;