ISO 8583 - 如何计算具有子字段的字段的 BCD 值?

ISO 8583 - How are BCD Values Calculated For Fields With Subfields?

谁能回答通常如何为具有子字段值的字段计算 BCD 数据?

我不是指代码,因为我已经确定了那部分。

我的意思是说我有字段 X,要发送的字段包含 5 个子值的数据。该字段是 BCD,但是否将每个子值转换为 BCD,然后附加到字段 X,或者将它们以明文形式添加到字段 X,然后作为一个整体转换为 BCD?

无法在任何地方找到明确的答案...甚至在我正在处理 oO 的消息规范中也没有

干杯, 迈克·K

你必须知道字段X的格式和子字段的格式。 我举个例子。

假设您想使用字段 X 将 emv 数据从 pos 传输到主机。
字段 X 的格式如下所述。

Length Attribute 3 bytes LLL Length of data to follow
Subfield 1 var bytes First Additional subfield
Subfield 2 var bytes Second Additional subfield
...
Subfield n var bytes nth Additional subfield

The structure of each additional subfield is as follows
Tag Name 2 bytes
Tag Length 1 byte
Tag Value ..bytes

如果一个字段包含子字段,则每个子字段都以其自己的格式打包或解包。

子字段不应再次打包或解包。

如果字段包含子字段,则无需定义字段体的格式。但是,可以定义字段头格式(标记或长度)。

以下示例包含一个具有三个子字段的字段

Message Structure:
<f type="VAL" name="Parent" len="21">
    <f type="VAL" name="Child1" bodyPacker="BcdBodyPacker" len="6"/>
    <f type="VAL" name="Child2" bodyPacker="BcdBodyPacker" len="7"/>
    <f type="VAL" name="Child3" bodyPacker="BcdBodyPacker" len="8"/>
</f>

Message data:
<f name="Parent">
    <f name="Child1" val="111111111111"/>
    <f name="Child2" val="22222222222222"/>
    <f name="Child3" val="3333333333333333"/>
</f>

Message bytes in hex:
111111111111222222222222223333333333333333

例子的源代码可以在GitHub

上找到

iso-8583-packer Java 库用于创建此示例。我是图书馆的作者。