- // for (i = 7; i<12; i++)
- // AWIDBits[i]=0x11;
-
- uBits = (fcode<<4) + (cnum>>12);
-
- if (!parityTest(uBits,12,0)) AWIDBits[2] |= (1<<5); // If not already even parity, set bit to make even
-
- uBits = AWIDBits[2]>>5;
-
- if (!parityTest(uBits, 3, 1)) AWIDBits[2] |= (1<<4);
-
- uBits = fcode>>5; // first 3 bits of facility-code
- AWIDBits[2] += (uBits<<1);
-
- if (!parityTest(uBits, 3, 1)) AWIDBits[2]++; // Set parity bit to make odd parity
-
- uBits = (fcode & 0x1C)>>2;
- AWIDBits[3] = 0;
-
- if (!parityTest(uBits,3,1)) AWIDBits[3] |= (1<<4);
-
- AWIDBits[3] += (uBits<<5);
- uBits = ((fcode & 0x3)<<1) + ((cnum & 0x8000)>>15); // Grab/shift 2 LSBs from facility code and add shifted MSB from cardnum
-
- if (!parityTest(uBits,3,1)) AWIDBits[3]++; // Set LSB for parity
-
- AWIDBits[3]+= (uBits<<1);
- uBits = (cnum & 0x7000)>>12;
- AWIDBits[4] = uBits<<5;
-
- if (!parityTest(uBits,3,1)) AWIDBits[4] |= (1<<4);
-
- uBits = (cnum & 0x0E00)>>9;
- AWIDBits[4] += (uBits<<1);
-
- if (!parityTest(uBits,3,1)) AWIDBits[4]++; // Set LSB for parity
-
- uBits = (cnum & 0x1C0)>>6; // Next bits from card number
- AWIDBits[5]=(uBits<<5);
-
- if (!parityTest(uBits,3,1)) AWIDBits[5] |= (1<<4); // Set odd parity bit as needed
-
- uBits = (cnum & 0x38)>>3;
- AWIDBits[5]+= (uBits<<1);
-
- if (!parityTest(uBits,3,1)) AWIDBits[5]++; // Set odd parity bit as needed
-
- uBits = (cnum & 0x7); // Last three bits from card number!
- AWIDBits[6] = (uBits<<5);
-
- if (!parityTest(uBits,3,1)) AWIDBits[6] |= (1<<4);
-
- uBits = (cnum & 0x0FFF);
-
- if (!parityTest(uBits,12,1))
- AWIDBits[6] |= (1<<3);
- else
- AWIDBits[6]++;
-