使用节点 js 将十六进制编码的 iso 8583 消息转换为 json



我正在使用这个库:https://github.com/zemuldo/iso_8583 尝试解析和转储ISO 8583消息。

代码

var bitMapData = '0210723A40010AE18002005000990000000750001002102636000000172636100210036014045016000042 (i'am using this library https://github.com/zemuldo/iso_8583)667818001               000000000TS0002tester                                  0490823 75551512000000075000000000010051003915030257360006133001';
const config = {
lenHeader: false, 
lenHeaderEncoding: 'utf8', 
bitmapEncoding: 'utf8', 
secondaryBitmap: false, 
hasSpecialFields: true,
};
let incoming = new Iso_8583().getIsoJSON(
new Buffer.alloc(bitMapData.length, bitMapData),
config
);
console.log(incoming)

代码结果

{   
'0': '0210',   
'2': '00100210263600000017263610021003601404501600004266',   
'3': '781800', 
'4': '1',   
'7': '    000000',   
'11': '000TS0',   
'12': '002tes',   
'13': 'ter ',   
'15': '    ',   
'18': '    ',   
'32': '',  
'37': '            ',   
'39': '  ',   
'41': '        ',   
'42': ' 0490823 755515',   
'43': '1200000007500000000001005100391503025736',   
'48': '',   
'49': '613',   
'63': '1',   
'74': '',   
'76': '',   
'89': '',   
'92': '',   
'93': '',   
'96': '',   
'126': '',   
'128': ''  
}

结果我需要:

{  
'0': '0201',  
'2': '',  
'3': '500099',  
'4': '000000075000',  
'7': '1002102636',  
'11': '000000',  
'12': '172636',   
'13': '1002',  
'15': '1003',  
'18': '6014',  
'32': '5016',  
'37': '000042667818',  
'39': '00',  
'41': '1',  
'42': '000000000TS0002',  
'43': 'tester',  
'48': '0823 75551512000000075000000000010051003915030257',  
'49': '360',   
'63': '133001' 
}

发生了一些奇怪的事情,上面的代码真的正是您正在运行的吗?

消息是:

0210723A40010AE180020050009900000007500010021026360...

MTI(在转储的第 0 位中返回(显然是:

0210723A40010AE180020050009900000007500010021026360...
----

"0210",所以你的示例应该返回 0201 很奇怪?是什么让你相信是这样。

继续,位图(消息开头的实际位图,指示消息中存在哪些字段(为:

0210723A40010AE180020050009900000007500010021026360...
----------------

它以"72"开头,因此第一位为零(0x72的第一个字节为 0111 0010(。这很奇怪,因为您发布的转储表明设置了字段 64 以外的字段。如果没有辅助位图,这是不可能的。由于辅助位图将由正在设置的主位图的第一个位指示,并且您在选项中显式禁用辅助位图,因此这不是预期的行为。

据我所知,其余的问题来自解析器将接下来的 8 个字节解释为辅助位图并移动内容:

0210723A40010AE180020050009900000007500010021026360...
----------------

字段 #2 现在(只是猜测(被解释为以 0010021 开头的 50 个字符 (BCD( 字段 ...:

0210723A40010AE180020050009900000007500010021026360...
------------>  ...

这让我相信有些事情在帖子中没有提到。

最新更新