javascript - 使用节点 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...
------------> ...
这让我相信有些事情在帖子中没有提到。
推荐阅读
- symfony5 - 如何在控制器中获取控制器名称 | symfony5
- npm - 在 devDependencies 中使用相同的名称使用分叉的 NPM 包作为替换
- flutter - 加载网络图片失败
- android - Android 'BadTokenException 窗口令牌 android.os.BinderProxy@4250d6d8 无效',前台服务正在运行
- r - 绘制预测值的数据
- python - Pika 心跳终止连接
- nonetype - 使用 if-else 选择结构实现程序
- html - 为什么我的 VsCode Liveserver 在保存时会跳转到页面的特定部分?
- storybook - 如何在故事书中设置基本href?
- c - 为什么while循环打印一行?