8583报文解析1.0

本文介绍了8583报文的基本规则,包括域规范、报文头、操作类型、位图以及域长度的详细说明。特别强调了位图表示的有效域明细和域长度的固定与自定义长度概念。此外,提到了代码实现中的工具类和解析结果对象,但未深入探讨子域解析。

8583报文解析1.0


一、规则

6000030000613200321001
0200
7024068420C48A11
166224242900000097
000000
000000006633
000737
2806
0720
0000
00
A557408463A49AB0A96CEA1BCEF80F88
48797BEED5677DCD7996A2A9ED47D0F33F5FFEFB806712582E
3836303030393032
383433313735303738333241494C4C
00725049303637303430323032303531373030303033313032393031373039323339383934373135303630363030303039373037303834314632443443453038303856312E322E392020
313536
0600000000000000
01329F260857A5387B3B16E7949F2701809F101307011703A00000010A0100000000006821587C9F3704065893499F360202C5950500000000009A031901119C01009F02060000000066335F2A02015682027C009F1A0201569F03060000000000009F3303E0E1C89F3501228408A0000003330101029F090200309F1E086D6639305F303100
001422000005000601
4630443332384230

1.1:域规范简表

  • 域的定义是基本业内规范,但是不代表要完全跟随规范,不同的项目需求不一样,与规范会有极小差异。
  • 这里仅供参考。
长度(字符) 规则说明
报文头 26
0 4 操作类型
1 16 有效的域的定义,16进制格式
2 2+len 主账号,前1个字节定义内容长度
3 6 交易处理码
4 12 交易金额
5
6
7
8
9
10
11 6 受卡方系统跟踪号
12 6 受卡方所在地时间,格式:hhmmss
13 4 受卡方所在地日期,格式:MMDD
14 4 卡有效期,格式:YYMM
15 4 清算日期,格式:MMDD
16
17
18
19
20
21
22 3 服务点输入方式码
23 3 卡序列号
24
25 2 服务点条件码
26 2 服务点PIN获取码
27
28
29
30
31
32 2+len 受理机构标识码,前1个字节定义内容长度
33
34
35 2+len 2磁道数据,前1个字节定义内容长度
36 4+len 3磁道数据,前2个字节定义内容长度
37 12 检索参考号
38 6 授权标识应答码
39 2 应答码
40
41 8*2 受卡机终端标识码
42 15*2 受卡方标识码
43
44 2+len 附加响应数据,前1个字节定义内容长度
45
46
47
48 4+len 附加数据-私有,前2个字节定义内容长度
49 3*2 交易货币代码
50
51
52 8*2 个人标识码数据
53 16 安全控制信息
54 4+len 余额,前2个字节定义内容长度
55 4+len IC卡数据域,前2个字节定义内容长度
56
57
58 4+len PBOC电子钱包标准的交易信息,前2个字节定义内容长度
59 4+len 自定义域,前2个字节定义内容长度
60 4+len 自定义域,前2个字节定义内容长度
61 4+len 原始信息域,前2个字节定义内容长度
62 4+len 自定义域,前2个字节定义内容长度
63 4+len 自定义域,前2个字节定义内容长度
64 16 报文鉴别码

1.2:规范说明

1.2.1: 报文头
  • 目前未找到准确拆解报文头的线管教学,期待后续补充…
1.2.2: 操作类型
  • 位于报文体0域,固定2字节的数字
请求码 响应码 类型说明
0200 0210 余额查询磁条卡消费银联扫码银联posp扫码
0220 0230 打印确认通知
0400 0410 冲正
0500 0510 批结算
0700 0710 微信二维码微信扫码支付宝二维码支付宝扫码银联二维码银联二维码状态查询
0800 0810 签到参数下载
0820 0830 签退pos状态上送
0840 0850 主秘钥下载

1.2.3: 位图:有效域明细

  • 位于报文体1域,固定8字节的16进制字符
  • 以案例为例:7024068420C48A11
  1. 先把值转换成二进制:0111000000100100000001101000010000100000110001001000101000010001
  2. 长度刚好64位,分别对应64个域,1代表报文中有该域的存在

1.2.4:域规范简表的表达解释

求生本能解释:纯个人理解的定义,有误请及时提出,谢谢。

  1. 域:报文从报文头往后,每一段有意义的字符串
  2. 域长度:分为固定长和自定义长
    2.1 固定长:以简表中 纯数字 表示
    2.2 自定义长:以简表中“数字+len”表示
    2.2.1 数字:“长度标识”占据“数字”个字符,“长度标识”代表该域内容长度的数字(不包含标识本身)
    2.2.2 len:该域内容长度(不包含标识本身),长度根据不同的压缩方式存在倍数差异,两倍长或三倍长

1.2.5:域长度说明

  1. 域长度以字节为单位,所以如果长度是5个字符,实为后补0的6个字符长度(简单理解为长度必须偶数)
  2. 传输的报文可能经过压缩的,但“长度标识”描述的长度是原文的长度,因此长度存在倍数差异

二、代码

  • 默认解析规则仅根据李大爷目前项目常见规定而定
  • 只做了初步拆解,并不涉及子域解析,请酌情享用(有时间会考虑2.0版本)

2.1:工具类

import com.lidaye.test.porttest.Test8583.enums.Msg8583;

import java.util.*;

/**
 * @author lidaye
 * @date 2022/6/28
 */
public class Test8583 {
   
   
    /**
     * 默认域解析规则
     */
    private final static Map<Integer, String> DEFAULT_RULE = new HashMap<>(64);

    /**
     * 类型校验规则
     */
    private final static Set<String> TYPE_CHECK_LIST = new HashSet<>();

    static {
   
   
        /** 默认域解析规则赋值 **/
        // 请求头
        DEFAULT_RULE.put(-1,"22");
        // 操作类型
        DEFAULT_RULE.put(0,"4");
        // 位图
        DEFAULT_RULE.put(1,"16");
        // 业务域
        DEFAULT_RULE.put(2,"2-1");
        DEFAULT_RULE.put(3,"6");
        DEFAULT_RULE.put(4,"12");
        DEFAULT_RULE.put(11,"6");
        DEFAULT_RULE.put(12,"6");
        DEFAULT_RULE.put(13,"4");
        DEFAULT_RULE.put(14,"4");
        DEFAULT_RULE.put(15,"4");
        DEFAULT_RULE.put(22,"3");
        DEFAULT_RULE.put(23,"3");
        DEFAULT_RULE.put(25,"2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值