swift 官方资料:https://www2.swift.com/knowledgecentre/publications/us5mc_20180720/2.0?topic=alec.htm#genalec

swift 百科:https://baike.baidu.com/item/SWIFT/1108075
prowide - swift 报文处理 开源框架:https://www.prowidesoftware.com/resources/quickstarts

  pom.xml引用包:

<dependency>
<groupId>com.prowidesoftware</groupId>
<artifactId>pw-swift-core</artifactId>
<version>SRU2018-7.10.4</version>
</dependency>

  如下解析MT940类型报文:

import com.prowidesoftware.swift.io.parser.SwiftParser;
import com.prowidesoftware.swift.model.*;
import com.prowidesoftware.swift.model.field.Field;
import com.prowidesoftware.swift.model.field.Field61;
import com.prowidesoftware.swift.model.mt.mt9xx.MT940; import java.io.IOException; public class MT940Test { public static void main(String[] args) throws IOException {
String mt940 = "{1:F01AAAABB99BSMK3513951576}"+
"{2:O9400934081223BBBBAA33XXXX03592332770812230834N}" +
"{4:\n"+
":20:0112230000000890\n"+
":25:SAKG800030155USD\n"+
":28C:255/1\n"+
":60F:C011223USD175768,92\n"+
":61:0112201223CD110,92NDIVNONREF//08 IL053309\n"+
"/GB/2542049/SHS/312,\n"+
":62F:C011021USD175879,84\n"+
":20:NONREF\n" +
":25:4001400010\n" +
":28C:58/1\n" +
":60F:C140327EUR6308,75\n" +
":61:1403270327C3519,76NTRF50RS201403240008//2014032100037666\n" +
"ABC DO BRASIL LTDA\n" +
":86:INVOICE NR. 6000012801 \n" +
"ORDPRTY : ABC DO BRASIL LTDA RUA LIBERO BADARO,293-SAO \n" +
"PAULO BRAZIL }";
// 方法一
SwiftParser parser = new SwiftParser(mt940);
SwiftMessage swiftMessage = parser.message();
System.out.println("getSender:" + swiftMessage.getSender());
System.out.println("getReceiver:" + swiftMessage.getReceiver());
System.out.println("getType:" + swiftMessage.getType());
System.out.println("getMtId:" + swiftMessage.getMtId());
System.out.println("getSignature:" + swiftMessage.getSignature());
System.out.println("*******************************************");
SwiftBlock1 swiftBlock1 = swiftMessage.getBlock1();
System.out.println("getApplicationId:" + swiftBlock1.getApplicationId());
System.out.println("getServiceId:" + swiftBlock1.getServiceId());
System.out.println("getLogicalTerminal:" + swiftBlock1.getLogicalTerminal());
System.out.println("getSequenceNumber:" + swiftBlock1.getSequenceNumber());
System.out.println("*******************************************");
SwiftBlock2 swiftBlock2 = swiftMessage.getBlock2();
System.out.println("getBlockValue:" + swiftBlock2.getBlockValue());
System.out.println("*******************************************");
SwiftBlock4 swiftBlock4 = swiftMessage.getBlock4();
Field[] fields = swiftBlock4.getFieldsByName("61");
for (Field field : fields) {
System.out.println("getTagValue:" + field.getValue());
System.out.println("AMOUNT:" + field.getComponent(5));
}
System.out.println("*******************************************");
// 方法二
MT940 mt = MT940.parse(mt940);
for (Field61 tx : mt.getField61()) {
System.out.println("Amount: " + tx.getComponent(Field61.AMOUNT));
System.out.println("Transaction Type: " + tx.getComponent(Field61.TRANSACTION_TYPE));
System.out.println("Reference Acc Owner: " + tx.getComponent(Field61.REFERENCE_FOR_THE_ACCOUNT_OWNER));
} }
}

  运行结果:

getSender:BBBBAA33XXXX
getReceiver:AAAABB99BSMK
getType:940
getMtId:fin.940
getSignature:null
*******************************************
getApplicationId:F
getServiceId:01
getLogicalTerminal:AAAABB99BSMK
getSequenceNumber:951576
*******************************************
getBlockValue:O9400934081223BBBBAA33XXXX03592332770812230834N
*******************************************
getTagValue:0112201223CD110,92NDIVNONREF//08 IL053309
/GB/2542049/SHS/312,
AMOUNT:110,92
getTagValue:1403270327C3519,76NTRF50RS201403240008//2014032100037666
ABC DO BRASIL LTDA
AMOUNT:3519,76
*******************************************
Amount: 110,92
Transaction Type: N
Reference Acc Owner: NONREF
Amount: 3519,76
Transaction Type: N
Reference Acc Owner: 50RS201403240008

  参考资料:https://blog.csdn.net/Little_Stars/article/details/100558234

       https://github.com/prowide/prowide-core-examples/blob/master/src/main/java/com/prowidesoftware/swift/samples/core/ParseMT940FromStringExample.java

swift MT报文解析处理的更多相关文章

  1. 报文解析及CRC类

    /// <summary> /// 报文解析转换类 /// </summary> public class DatagramConvert { public static En ...

  2. ISO8583报文解析

    在此只写了一个8583报文的拆包,组包其实也差不多的. 不多说直接上文件, 具体思路过程,在解析类里面写的有. 其中包含了四个文件 8583resp.txt报文 ISO8583medata配置文件 B ...

  3. 基于DPI(深度报文解析)的应用识别

    一.概述 1.DPI(Deep packet inspection,深度报文解析) 所谓“深度”是和普通的报文分析层次相比较而言的,“普通报文检测”仅分析IP包4 层以下的内容,包括源地址.目的地址. ...

  4. C#ModBus Tcp 报文解析

    上一篇博客已经完成 C#ModBus Tcp Master的实现 本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文) 读操作 功能码 0x01 读一组线圈 读取站号为1 从地址12开 ...

  5. GOOSE报文解析

    GOOSE报文解析 变电站 使用 MMS报文 http://www.360doc.com/content/16/1014/20/36538220_598459873.shtml

  6. MH/T4029.3 IFPL报文解析

    MH/T4029.3是民航业用来规定飞行计划相关数据交互的规范,今天我们先来解析下其中I类的IFPL报文. 我们先来看看IFPL报文长啥样. ZCZC -TITLE IFPL -FILTIM 0109 ...

  7. xml报文解析和组装

    package com.xjts.cipher.util;import java.io.File;import java.io.FileWriter;import java.io.IOExceptio ...

  8. Motorola和Intel格式报文解析的区别

      结论:无论用的Motorola,还是Intel格式,只在单个信号跨字节时解析才有区别. 先看下Vector的CANoe中dbc编辑器是如何呈现报文的: 图1 CAN报文中byte与bit顺序 从图 ...

  9. iOS开发之Swift 4 JSON 解析指南

    Apple 终于在 Swift 4 的 Foundation 的模块中添加了对 JSON 解析的原生支持. 虽然已经有很多第三方类库实现了 JSON 解析,但是能够看到这样一个功能强大.易于使用的官方 ...

随机推荐

  1. vue子路由设置、全局组件、局部组件的原生写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. AtCoder AGC038D Unique Path (图论)

    题目链接 https://atcoder.jp/contests/agc038/tasks/agc038_d 题解 orz zjr神仙做法 考虑把所有\(C_i=0\)的提示的两点连边,那么连完之后的 ...

  3. 快速乘(O(1))

    inline long long multi(long long x,long long y,long long mod) { long long tmp=(x*y-(long long)((long ...

  4. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

        方法使用前需了解: 来自”和“小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查该form上添加 ...

  5. ajax+php (jquery.form插件)实现异步文件上传

    <!DOCTYPE html> <html lang="CN"> <head> <title>upload model</ti ...

  6. PLSQL报错: ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务

    一开始吓尿了,以为自己动着什么东西了把数据库玩坏了,谁知道打开服务发现服务没启动........... 我们要确保数据库服务是启动状态

  7. 美团DSP

    https://blog.csdn.net/LW_GHY/article/details/71455535 ADX出价调整, 预估ctr抽样后调整还原 2. 动态调整报价在DSP的报价环节,点击率预估 ...

  8. Spring mvc中@RequestMapping 基本用法

    @RequestMapping(value="/departments") public String simplePattern(){ System.out.println(&q ...

  9. 性能测试之JMeter远程模式

    性能测试之JMeter远程模式 事实上,你的JMeter客户端机器是不能表现出完美的压力请求,来模拟足够多的用户或由于网络限制去向服务施加压力,一种解决方法是通过一个JMeter去控制多个/远程JMe ...

  10. oslo_db.sqlalchemy.engines连库

    _ mysql -uroot -pc1234 oslo_db.sqlalchemy.engines root@devstack2019:/etc/keystone# more keystone.con ...