The ANSI/ISO BCD Data format is format defines the data in encoding for Track 2. It uses 5-bits of data (zeros and ones) to create the character set. In reality, only 4 bits are used for character creation while the fifth bit is a parity bit that always leaves the character with an odd number of 1’s. Using this check, a reader can monitor its own read-accuracy (if it has an odd number of 1’s it assumes that a valid read occurred, if not then an error has occurred and the card must be re-swiped.
The 4-bits are used to create a 16-character set (2x2x2x2=16). Ten of the sixteen create the numeric digits (0-9) and the remaining 6 characters are specified as framing and control characters. Important framing characters include the Start Sentinel (SS) signifying the start of the meaningful data and the End Sentinel (ES) signifying the end of the meaningful data and a Field Separator (FS) to indicate breaks in data sections.
The data in Track 2 is as follows:
| SS | PAN | FS | Additional Data | ES | LRC |
Note: SS = Start Sentinenl; PAN = Primary Account Number; FS = Field Seperator; Additional Data = Can include expiration date, offset, encrypted PIN, or other data; ES = End Sentinel; and LRC = Longitudinal Redundancy Check (a digit that serves as an error check for the whole track of data (in much the same way that the parity bit checks the individual character).
When read, the the data in Track 2 looks like this to the on screen:
;1111222233334444=000300440009000330?5
And it actually looks like this in its binary code (at the bit level):
110101000010000100001000001000010000100001000110011100111001110010010000100001000010
01011000001000010000111001000010000100000100000100001000011001100010000100001110
0111001000011111110101
Character - Bit Number 1 2 3 4 Parity Bit
0 – 0 0 0 0 1
1 – 1 0 0 0 0
2 – 0 1 0 0 0
3 – 1 1 0 0 1
4 – 0 0 1 0 0
5 – 1 0 1 0 1
6 – 0 1 1 0 1
7 – 1 1 1 0 0
8 – 0 0 0 1 0
9 – 1 0 0 1 1
cc – 0 1 0 1 1
SS (;) – 1 1 0 1 0
cc – 0 0 1 1 1
FS (=) – 1 0 1 1 0
cc – 0 1 1 1 0
ES (?) – 1 1 1 1 1