public void GetEncodedLength()
        {
            BcdStringEncoder encoder;

            for (int i = 0; i < 16; i++)
            {
                encoder = BcdStringEncoder.GetInstance(false, ( byte)i);

                Assert.IsTrue(encoder.GetEncodedLength(0) == 0);
                Assert.IsTrue(encoder.GetEncodedLength(1) == 1);
                Assert.IsTrue(encoder.GetEncodedLength(2) == 1);
                Assert.IsTrue(encoder.GetEncodedLength(10) == 5);
                Assert.IsTrue(encoder.GetEncodedLength(11) == 6);
                Assert.IsFalse(encoder.GetEncodedLength(8) == 5);

                encoder = BcdStringEncoder.GetInstance(true, ( byte)i);

                Assert.IsTrue(encoder.GetEncodedLength(0) == 0);
                Assert.IsTrue(encoder.GetEncodedLength(1) == 1);
                Assert.IsTrue(encoder.GetEncodedLength(2) == 1);
                Assert.IsTrue(encoder.GetEncodedLength(10) == 5);
                Assert.IsTrue(encoder.GetEncodedLength(11) == 6);
                Assert.IsFalse(encoder.GetEncodedLength(8) == 5);
            }
        }
        public void Decode()
        {
            ParserContext parserContext = new ParserContext(
                ParserContext.DefaultBufferSize);
            BcdStringEncoder encoder;

            encoder = BcdStringEncoder.GetInstance(true, 0xF);
            parserContext.Write(new byte[] { 0xF1, 0x2D, 0x45 }, 0, 3);
            Assert.IsTrue(encoder.Decode(ref parserContext, 5).Equals("12D45"));
            Assert.IsTrue(parserContext.DataLength == 0);

            encoder = BcdStringEncoder.GetInstance(false, 0);
            parserContext.Write(new byte[] { 0xF1, 0x2D, 0x45, 0x20, 0x20 }, 0, 5);
            string data = encoder.Decode(ref parserContext, 5);

            Assert.IsTrue(data.Equals("F12D4"));
            Assert.IsTrue(parserContext.DataLength == 2);
            parserContext.Clear();

            parserContext.Write(new byte[] { 0xF1, 0x2D, 0x45 }, 0, 3);
            Assert.IsTrue(encoder.Decode(ref parserContext, 6).Equals("F12D45"));
            Assert.IsTrue(parserContext.DataLength == 0);

            try {
                encoder.Decode(ref parserContext, 6);
                Assert.Fail();
            } catch (ArgumentException e) {
                Assert.IsTrue(e.ParamName.Equals("length"));
            }
        }
        public void GetInstance()
        {
            BcdStringEncoder encoder;

            for (int i = 0; i < 16; i++)
            {
                encoder = BcdStringEncoder.GetInstance(false, ( byte)i);
                Assert.IsNotNull(encoder);
                Assert.IsFalse(encoder.LeftPadded);
                Assert.IsTrue(encoder.Pad == ( byte)i);
                Assert.IsTrue(encoder == BcdStringEncoder.GetInstance(false, ( byte)i));

                encoder = BcdStringEncoder.GetInstance(true, ( byte)i);
                Assert.IsNotNull(encoder);
                Assert.IsTrue(encoder.LeftPadded);
                Assert.IsTrue(encoder.Pad == ( byte)i);
                Assert.IsTrue(encoder == BcdStringEncoder.GetInstance(true, ( byte)i));
            }
        }
        public void Encode()
        {
            FormatterContext formatterContext = new FormatterContext(
                FormatterContext.DefaultBufferSize);

            BcdStringEncoder encoder;

            encoder = BcdStringEncoder.GetInstance(true, 0xF);
            encoder.Encode("12D45", ref formatterContext);
            Assert.IsTrue(formatterContext.GetDataAsString().Equals(
                              Encoding.UTF7.GetString(new byte[] { 0xF1, 0x2D, 0x45 })));

            formatterContext.Clear();

            encoder = BcdStringEncoder.GetInstance(false, 0xE);
            encoder.Encode("12D45", ref formatterContext);
            Assert.IsTrue(formatterContext.GetDataAsString().Equals(
                              Encoding.UTF7.GetString(new byte[] { 0x12, 0xD4, 0x5E })));

            formatterContext.Clear();

            encoder = BcdStringEncoder.GetInstance(true, 4);
            encoder.Encode("12a45", ref formatterContext);
            Assert.IsTrue(formatterContext.GetDataAsString().Equals(
                              Encoding.UTF7.GetString(new byte[] { 0x41, 0x2a, 0x45 })));

            formatterContext.Clear();

            encoder = BcdStringEncoder.GetInstance(true, 0);
            encoder.Encode("1245", ref formatterContext);
            Assert.IsTrue(formatterContext.GetDataAsString().Equals(
                              Encoding.UTF7.GetString(new byte[] { 0x12, 0x45 })));

            formatterContext.Clear();

            encoder = BcdStringEncoder.GetInstance(true, 0xf);
            encoder.Encode("1245", ref formatterContext);
            Assert.IsTrue(formatterContext.GetDataAsString().Equals(
                              Encoding.UTF7.GetString(new byte[] { 0x12, 0x45 })));
        }
        /// <summary>
        /// It initializes the fields formatters for this message formatter.
        /// </summary>
        private void SetupFields()
        {
            MessageTypeIdentifierFormatter = new StringFieldFormatter(
                -1, new FixedLengthManager(4), BcdStringEncoder.GetInstance(true, 0),
                ZeroPaddingLeft.GetInstance(false, true), "Message type identifier");

            FieldFormatters.Add(new BitMapFieldFormatter(0, 1, 64,
                                                         BinaryEncoder.GetInstance(), "Primary bitmap"));
            FieldFormatters.Add(new BitMapFieldFormatter(1, 65, 128,
                                                         BinaryEncoder.GetInstance(), "Secondary bitmap"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    2, new VariableLengthManager(0, 19, BcdLengthEncoder.GetInstance(19)),
                                    BcdStringEncoder.GetInstance(false, 0), NumericValidator.GetInstance(),
                                    "Primary account number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    3, new FixedLengthManager(6), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Processing code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    4, new FixedLengthManager(12), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transaction amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    5, new FixedLengthManager(12), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Reconciliation amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    6, new FixedLengthManager(12), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Cardholder billing amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    7, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Transmission date and time"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    8, new FixedLengthManager(8), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Cardholder billing fee amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    9, new FixedLengthManager(8), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Reconciliation conversion rate"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    10, new FixedLengthManager(8), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Cardholder billing conversion rate"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    11, new FixedLengthManager(6), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Systems trace audit number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    12, new FixedLengthManager(12), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Local transaction date and time"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    13, new FixedLengthManager(4), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Effective date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    14, new FixedLengthManager(4), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Expiration date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    15, new FixedLengthManager(6), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Settlement date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    16, new FixedLengthManager(4), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Conversion date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    17, new FixedLengthManager(4), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Capture date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    18, new FixedLengthManager(4), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Merchant type"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    19, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Acquiring institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    20, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Primary account number country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    21, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Forwarding institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    22, new FixedLengthManager(12), StringEncoder.GetInstance(),
                                    "Point of service data code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    23, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Card sequence number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    24, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Function code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    25, new FixedLengthManager(4), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Message reason code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    26, new FixedLengthManager(4), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Card acceptor business code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    27, new FixedLengthManager(1), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Approval code length"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    28, new FixedLengthManager(6), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Reconciliation date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    29, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Reconciliation indicator"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    30, new FixedLengthManager(24), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Original amounts"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    31, new VariableLengthManager(0, 99, BcdLengthEncoder.GetInstance(99)),
                                    StringEncoder.GetInstance(), "Acquirer reference data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    32, new VariableLengthManager(0, 11, BcdLengthEncoder.GetInstance(11)),
                                    BcdStringEncoder.GetInstance(false, 0), NumericValidator.GetInstance(),
                                    "Acquirer institution identification code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    33, new VariableLengthManager(0, 11, BcdLengthEncoder.GetInstance(11)),
                                    BcdStringEncoder.GetInstance(false, 0), NumericValidator.GetInstance(),
                                    "Forwarding institution identification code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    34, new VariableLengthManager(0, 28, BcdLengthEncoder.GetInstance(28)),
                                    StringEncoder.GetInstance(), "Extended primary account number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    35, new VariableLengthManager(0, 37, BcdLengthEncoder.GetInstance(37)),
                                    BcdStringEncoder.GetInstance(false, 0), "Track 2 data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    36, new VariableLengthManager(0, 104, BcdLengthEncoder.GetInstance(104)),
                                    StringEncoder.GetInstance(), "Track 3 data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    37, new FixedLengthManager(12), StringEncoder.GetInstance(),
                                    "Retrieval reference number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    38, new FixedLengthManager(6), StringEncoder.GetInstance(),
                                    "Approval code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    39, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Action code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    40, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Service code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    41, new FixedLengthManager(8), StringEncoder.GetInstance(),
                                    "Card acceptor terminal identification"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    42, new FixedLengthManager(15), StringEncoder.GetInstance(),
                                    "Card acceptor identification code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    43, new VariableLengthManager(0, 99, BcdLengthEncoder.GetInstance(99)),
                                    StringEncoder.GetInstance(), "Card acceptor name/location"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    44, new VariableLengthManager(0, 99, BcdLengthEncoder.GetInstance(99)),
                                    StringEncoder.GetInstance(), "Additional response data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    45, new VariableLengthManager(0, 76, BcdLengthEncoder.GetInstance(76)),
                                    StringEncoder.GetInstance(), "Track 1 data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    46, new VariableLengthManager(0, 204, BcdLengthEncoder.GetInstance(204)),
                                    StringEncoder.GetInstance(), "Fees amounts"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    47, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Additional data - national"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    48, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Additional data - private"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    49, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    "Transaction currency code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    50, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    "Reconciliation currency code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    51, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    "Cardholder billing currency code"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    52, new FixedLengthManager(8), BinaryEncoder.GetInstance(),
                                    "Personal identification number (PIN) data"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    53, new VariableLengthManager(0, 48, BcdLengthEncoder.GetInstance(48)),
                                    BinaryEncoder.GetInstance(), "Security related control information"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    54, new VariableLengthManager(0, 120, BcdLengthEncoder.GetInstance(120)),
                                    StringEncoder.GetInstance(), "Amounts, additional"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    55, new VariableLengthManager(0, 255, BcdLengthEncoder.GetInstance(255)),
                                    BinaryEncoder.GetInstance(), "IC card system related data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    56, new VariableLengthManager(0, 35, BcdLengthEncoder.GetInstance(35)),
                                    BcdStringEncoder.GetInstance(false, 0), NumericValidator.GetInstance(),
                                    "Original data elements"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    57, new FixedLengthManager(3), BcdStringEncoder.GetInstance(false, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Authorization life cycle code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    58, new VariableLengthManager(0, 11, BcdLengthEncoder.GetInstance(11)),
                                    BcdStringEncoder.GetInstance(false, 0), NumericValidator.GetInstance(),
                                    "Authorizing agent institution Id Code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    59, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Transport data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    60, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    61, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    62, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    63, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    64, new FixedLengthManager(8), BinaryEncoder.GetInstance(),
                                    "Message authentication code field"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    65, new FixedLengthManager(8), BinaryEncoder.GetInstance(),
                                    "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    66, new VariableLengthManager(0, 204, BcdLengthEncoder.GetInstance(204)),
                                    StringEncoder.GetInstance(), "Amounts, original fees"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    67, new FixedLengthManager(2), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Extended payment data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    68, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Receiving institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    69, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Settlement institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    70, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Authorizing agent institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    71, new FixedLengthManager(8), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Message number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    72, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Data record"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    73, new FixedLengthManager(6), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, false), "Action date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    74, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    75, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    76, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    77, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    78, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transfer, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    79, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transfer, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    80, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Inquiries, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    81, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Authorizations, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    82, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Inquiries, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    83, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Payments, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    84, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Payments, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    85, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Fee collections, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    86, new FixedLengthManager(16), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    87, new FixedLengthManager(16), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, reversal amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    88, new FixedLengthManager(16), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    89, new FixedLengthManager(16), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, reversal amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    90, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Authorizations, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    91, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transaction destination institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    92, new FixedLengthManager(3), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transaction originator institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    93, new VariableLengthManager(0, 11, BcdLengthEncoder.GetInstance(11)),
                                    BcdStringEncoder.GetInstance(false, 0), NumericValidator.GetInstance(),
                                    "Transaction destination institution Id Code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    94, new VariableLengthManager(0, 11, BcdLengthEncoder.GetInstance(11)),
                                    BcdStringEncoder.GetInstance(false, 0), NumericValidator.GetInstance(),
                                    "Transaction originator institution Id Code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    95, new VariableLengthManager(0, 99, BcdLengthEncoder.GetInstance(99)),
                                    StringEncoder.GetInstance(), "Card issuer reference data"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    96, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(48)),
                                    BinaryEncoder.GetInstance(), "Key management data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    97, new FixedLengthManager(17), BcdStringEncoder.GetInstance(true, 0),
                                    "Net reconciliation amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    98, new FixedLengthManager(25), StringEncoder.GetInstance(),
                                    "Payee"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    99, new VariableLengthManager(0, 11, BcdLengthEncoder.GetInstance(11)),
                                    BcdStringEncoder.GetInstance(false, 0), NumericValidator.GetInstance(),
                                    "Settlement institution Id code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    100, new VariableLengthManager(0, 11, BcdLengthEncoder.GetInstance(11)),
                                    BcdStringEncoder.GetInstance(false, 0), NumericValidator.GetInstance(),
                                    "Receiving institution Id code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    101, new VariableLengthManager(0, 17, BcdLengthEncoder.GetInstance(17)),
                                    StringEncoder.GetInstance(), "File name"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    102, new VariableLengthManager(0, 28, BcdLengthEncoder.GetInstance(28)),
                                    StringEncoder.GetInstance(), "Account identification 1"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    103, new VariableLengthManager(0, 28, BcdLengthEncoder.GetInstance(28)),
                                    StringEncoder.GetInstance(), "Account identification 2"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    104, new VariableLengthManager(0, 100, BcdLengthEncoder.GetInstance(100)),
                                    StringEncoder.GetInstance(), "Transaction description"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    105, new FixedLengthManager(16), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, chargeback amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    106, new FixedLengthManager(16), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, chargeback amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    107, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, chargeback number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    108, new FixedLengthManager(10), BcdStringEncoder.GetInstance(true, 0),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, chargeback number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    109, new VariableLengthManager(0, 84, BcdLengthEncoder.GetInstance(84)),
                                    StringEncoder.GetInstance(), "Credits, fee amounts"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    110, new VariableLengthManager(0, 84, BcdLengthEncoder.GetInstance(84)),
                                    StringEncoder.GetInstance(), "Debits, fee amounts"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    111, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    112, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    113, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    114, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    115, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    116, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    117, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    118, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    119, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    120, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    121, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    122, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    123, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    124, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    125, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    126, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    127, new VariableLengthManager(0, 999, BcdLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    128, new FixedLengthManager(8), BinaryEncoder.GetInstance(),
                                    "Message authentication code"));
        }