swift MT报文解析处理

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:
"+
                ":20:0112230000000890
"+
                ":25:SAKG800030155USD
"+
                ":28C:255/1
"+
                ":60F:C011223USD175768,92
"+
                ":61:0112201223CD110,92NDIVNONREF//08 IL053309
"+
                "/GB/2542049/SHS/312,
"+
                ":62F:C011021USD175879,84
"+
                ":20:NONREF
" +
                ":25:4001400010
" +
                ":28C:58/1
" +
                ":60F:C140327EUR6308,75
" +
                ":61:1403270327C3519,76NTRF50RS201403240008//2014032100037666
" +
                "ABC DO BRASIL LTDA
" +
                ":86:INVOICE NR. 6000012801 
" +
                "ORDPRTY : ABC DO BRASIL LTDA RUA LIBERO BADARO,293-SAO 
" +
                "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

原文地址:https://www.cnblogs.com/Big-Boss/p/11955867.html