首页 > 解决方案 > 使用节点 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' 
}

标签: javascriptnode.jsiso8583

解决方案


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

消息是:

0210723A40010AE180020050009900000007500010021026360...

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

0210723A40010AE180020050009900000007500010021026360...
----

“0210”,所以奇怪的是你的例子应该返回0201?是什么让你相信事实就是如此。

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

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

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

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

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

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

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

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


推荐阅读