Skip to content

Variable Fields

Raghavendra Balgi edited this page Apr 21, 2020 · 4 revisions

Handling of Variable Fields

Variable fields come in lot of varieties, typical ones like

  • LLVAR - where there are 2 bytes for the length indicator
  • LLLVAR - Where there are 3 bytes for the length indicator

Special case for BCD fields -

In case of LLLVAR, where the length indicator encoding is BCD, the general interpretation is to have 3 effective digits with a 0 prepended so that it sits on a two byte boundary. For example, consider a LLVAR field with BCD encoding for length indiciator having a data portion of 150 bytes. The BCD length indicator in this case will be 0150. Regardless, in IsoSim spec definition, the lenght_indicator_size defined for the field is always in bytes, i.e In this case 2 (not 3 or 4).

Special L*Var fields with BCD data encoding, With odd numbered digits

When data_encoding is BINARY and length_indicator_multiplier is 2, the field is treated as a special BCD type field with an padding of trailing F or leading 0. So if either of those padding nibbles (half-bytes) are present, they are not accounted for in the final tally of digits

Example -

Given a field wit value of 765467654567655F : The effective digits are only 15 (F is a padding) and so the computed length indicator in this case will be 0015 (if len encoding is BCD), 3135 (if len encoding is ascii), F1F5 (if len encoding is ebcdic) 000F (if len encoding is BINARY)

              - name: "PAN_BCD_Special"
                id: 29
                type: Variable
                length_indicator_size: 2
                length_indicator_multiplier: 2
                length_indicator_encoding: BCD
                data_encoding: BINARY
                padding: LEADING_F
                position: 14


Note that the data_encoding above is set to BINARY although the field is effectively BCD. This is deliberate to allow for the 'F' character padding which is outside of the BCD character set.

The length_indicator_multiplier of 2 is a hint to the parser/assembler to set the value of the LL part to number of digits (half-bytes) and not bytes

(The above functionality is being developed as part of April final release - 0.7.1)