Преобразование закодированного в шестнадцатеричном формате сообщения ISO 8583 в JSON с использованием узла JS - PullRequest
0 голосов
/ 16 октября 2019

Я использую эту библиотеку: 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' 
}

1 Ответ

0 голосов
/ 17 октября 2019

Что-то странное происходит, если приведенный выше код действительно именно то, что вы запускаете?

Сообщение:

0210723A40010AE180020050009900000007500010021026360...

MTI (возвращается в бите 0 дампа)ясно:

0210723A40010AE180020050009900000007500010021026360...
----

"0210", поэтому странно, что ваш пример должен возвращать 0201? Что заставляет вас верить, что это так.

Далее, растровое изображение (фактическое растровое изображение в начале сообщения, которое указывает, какие поля присутствуют в сообщении):

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

начинается с '72', поэтому первый бит равен нулю (первый байт 0x72 равен 0111 0010). Это странно, потому что размещенный вами дамп указывает, что поля за пределами поля 64 установлены. Это невозможно без вторичного растрового изображения. В качестве вторичного растрового изображения будет указан первый бит устанавливаемого первичного растрового изображения, и вы явно отключите вторичное растровое изображение в параметрах, это не ожидаемое поведение.

Из того, что я могу сказать, остальная частьпроблемы возникают из-за того, что синтаксический анализатор интерпретирует следующие 8 байтов как вторичное растровое изображение и смещает их воедино:

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

Поле № 2 теперь (просто догадывается) интерпретируется как поле из 50 символов (BCD), начиная с 0010021...:

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

Это наводит меня на мысль, что есть вещи, которые не упоминаются в посте.

...