8583报文的使用和解析

ISO8583报文(简称8583包)又称8583报文是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。

8583包前面一段为位图,用来确定包的字段域组成情况。

其中位图是8583包的灵魂,它是打包解包确定字段域的关键,而了解每个字段域的属性则是填写数据的基础。在POS机的开发上时经常要用到,例如回头客会员管理系统在POS机上的应用就是采用8583报文。

 

“消费”类型报文的测试和组8583报文的过程,说明一下,这里是针对我们日常使用POS机系统来说的,这里主要是模拟的POS终端发向POSP系统的8583报文。其基本业务流程图如下所示

基础知识:

1byte = 8bit

1byte = 2个16进制数

2个字节=1个字符

BCD码:用4位二进制数来表示1位十进制数中的0~9这10个数码,即1bcd码=4bit

报文结构:

TPDU头 =  ID(60H) + 目的地址(N4) + 源地址(N4),长度为10字节,压缩时用BCD码表示为5个字节长度的数值。

 

报文头 = 应用类别定义(N2 )+软件总版本号(N2) + 终端状态(N1) + 处理要求 (N1)+ 软件分版本号(N6),总长度为12字节,压缩时用BCD码表示为6个字节长度的数值。

报文长度(2字节)+TPDU(5字节)+报文头(6字节)+域数据(指令码(0域 2字节 消息类型)+位图(8字节)+其他域数据

POS终端上送POS中心的消息报文结构包括TPDU、报文头和应用数据三部分:

16进制报文:

007b 6000160000 602200000000 0200 7020048020c08811

600016000060220000000002007020048020c08811165477666265921222000000000000014959555556022000375477666265921222d25085060000012600000033333333333333333232323232323232323232323232323135361000000000000000000822000001001500000100100000103133394343433842

 

青色背景:报文长度 007b  如上是246个字节->123个字符->长度是123(10进制)->7b(16进制)->占用两个字节007b

 

黄色背景:TUDU头 6000160000

 

红色背景:报文头 602200000000

磁条卡金融支付类应用为:60

软件版本号              22

终端状态                0(正常交易状态)

处理要求                0(无处理要求)

保留使用                000000

 

灰色背景:消息类型 0200

 

绿色背景:bitmap位图,转成bit显示, 7020048020c08811

根据文档我们可以轻易的得到需要的域为2,3,4,11,22,25,35,41,42,49,53,60,64域

 

(6)     2域

 

165477666265921222(16个字节,最大是19个字节) 主账号

 

N..19(LLVAR),2个字节的长度值+最大19个字节的主账号,

压缩时用BCD码表示的1个字节的长度值+用左靠BCD码表示的最大10个字节的主账号。

 

(7)     3域

 

000000 交易处理码

 

(8)     4域

 

000000014959 (149.59CNY 49域可以看出来)

 

(9)     11域

 

555556 (系统跟踪号 定长3个字节)

 

(10) 22域

 

0220 (服务点输入方式码 刷卡无PIN)

 

(11) 25域

 

00 (服务点条件码 00正常提交)

 

(12) 35域

 

375477666265921222d250850600000126000000

 

    2磁道数据(Track 2 Data)

 

2个字节的长度值+最大37个字节的第二磁道数据(数字和分隔符)

 

压缩时用BCD码表示的1个字节的长度值+用左靠BCD码表示的最大19个字节的第二磁道数据

 

 

 

(13) 41域

 

受卡机终端标识码

 

3333333333333333  (33333333 BCD码)

 

 

 

(14) 42域

 

受卡方标识码

 

323232323232323232323232323232 (222222222222222 BCD码)

 

 

(ANS15,15个字节的定长域)

 

(15) 49域

 

交易货币代码

 

313536(AN3)     (156 BCD码)

 

(16) 53域

 

安全控制信息

 

1000000000000000 (16 BCD个字节)

 

(17) 60域

 

60.1交易类型码  22:消费类型

 

60.2批次号         000001

 

长度:8个字节

 

000822000001

 

压缩时用右靠BCD码表示的2个字节的长度值+用左靠BCD码表示的最大7个字节的数据

 

(18) 64域

 

报文鉴别码(Message Authentication Code) MAC

 

B64,8个字节的定长域

 

3133394343433842

转载于:https://www.cnblogs.com/yiyi16801/p/7442316.html

iso8583 bitMap生成与解析详解 大家都知道可以用8个字节或者16个字节表示64个域或者128个域,那么具体是怎么来的呢?在8583报文中,如果是64位,那么就用64个0表示所有的域,哪一个域有值,那么代表这个域的0换成1,比如0000005...那么代表的是64域中第7域有值;如果是128域,那么应该是128个0,第一个0变... 阅读详情

相关推荐

java 8583报文解析_ISO8583报文解析

1 packagecom.handle8583;23 importjava.io.UnsupportedEncodingException;4 importjava.util.ArrayList;5 importjava.util.Collections;6 importjava.util.Comparator;7 importjava.util.HashMap;8 importjava.util...

weixin_36146811的博客 1225

8583报文及各域的详解

非常详细的8583报文及各个域的详解,讲解的非常详解,想详细了解8583报文的可以下载去看

java8583报文解析及生成,粗略理解

8583报文

maweixiaaaa的博客 8054

8583报文解析框架Simple8583.zip

最近在做中国银行的一个快捷支付渠道,使用的是 ISO8583 协议,一开始用的是JPOS框架,但是感觉框架比较臃肿,而且文档也比较少。在等待银行专线的过程中,自己闭门造车做了一个简单的8583报文解析框架 —— Simple8583,将程序重写了一遍,渠道中的代码量少了不少,这几天中行的接口在测试环境终于调试完成了。抽空分享一下这段时间自己学到的知识。 数据类型与编码格式: 根据接触到的数据类型将数据分为如下几种类型:          CHAR(asc编码,直接使用字符串的getBytes(ENCODING)方法获取字节数组)   BINARY(二进制编码,在打包时将8位01值组装为一个字节),             NUMERIC(BCD编码,即8421码),                LLVAR(变长域,采用ASC编码,每个LLVAR类型的域前会有1字节的域字节长度,表示长度的字节用BCD编码表示)                LLLVAR(变长域,与LLVAR域类似,不同之处在于每个LLLVAR域前会有2字节的域字节长度,长度同样以BCD编码表示)             LLVAR_NUMERIC(变长域,采用BCD编码,前有1字节的长度,长度为域值的长度,而非字节长,如域值为123456,编码后长度为3字节,但是表示域长的字节值为6)       如果用到其它数据类型可以在IsoType中进行添加,并在IsoField中添加处理操作 BitMap:        BitMap是ISO8583报文的精髓所在,ISO8583报文支持64域128域两种,但是并非每次请求都会将所有域都请求过去,BItMap就起到了标识哪些域是有效的请求域,接收方也会根据BitMap中约定的值对域进行解析。   那么BitMap又是如何工作的呢?          首先,BItMap分为8字节16字节两种情况,分别表示支持64域128域,其第一位值为1,表示BitMap为16字节,否则为8字节。       其次,BitMap中的每一位对应数据域的第几域,有效域会置为1,比如01001000表示第二域第5域为有效位。 在Simple8583中具体的实现是通过BitMap类实现的,具体可参考源码。 mti:            mti即 message type identifier消息类型标识,为4位bcd编码的数字标识符,用于描述信息的类型。 同一个mti可以用于标识多个不同的交易,比如一般常用的0200可以用来表示消费交易,消费撤销,分期付款消费分期付款撤销,但是对于同一个mti标识的数据域类型定义是类似的。           具体的实现,我将Simple8583的xml文件设置为了两部分,一部分为公用的报文头,如msgLength,tpdu,bitmap等,另外一部分分按照mti的不同分为多个package体。 粗略的实现流程:          1)组装请求的Map数据(只组装需要的数据域,key值为对应的数据域或包头的值)          2)请求数据进入SimpleClient代理,SimpleClient根据传入的值解析xml文件(jaxb实现,做了缓存)          3)根据传入值的mti寻找对应的IsoPackage类,对找到的IsoPackage类进行clone(避免污染),对clone值中的域进行值处理格式化         4)生成BitMap,计算Mac值(如有)          5)使用ByteArrayOutputStream将组装成的IsoPackage域值进行拼装成为一个大的byte数组,在byte前拼装两个字节的长度          6)通过Socket将数据发送并接受响应(读取前两个字节长度,根据长度获取其剩余报文),根据IsoPackage解析报文域,解析得到BitMap后根据BitMap对数据域进行解析,并将值都放入到对应的field中          7)将数据都放在Map中返回,并进行MAC校验(如有) 标签:Simple8583

银联银行卡交换系统8583报文解析

前言 最近在做8583报文这块解析,也遇到一些坑。下面将会介绍自己学习了解8583报文这块的经验,希望可以帮到那些刚刚接触8583报文的同学们。 入门 首先我们需要知道的是我们的8583报文是基于POS(销售终端的)还是基于银联银行卡交换系统的报文。网上有很多关于POS终端系统8583解析相关的文章,但是关于银联银行卡交换系统的报文很少。所以本文介绍的是基于银行银联卡交换系统8583报文解析的。...

GalenGao 1万+

银联银行卡8583报文

银联银行卡8583报文

qq_41201304的博客 5595

开源J8583与J8583CN简略介绍

因工作需要,近期研究了ISO8583协议。 1、站在巨人的肩膀上,初学者想了解什么是ISO8583协议,请参考该文章http://www.itpub.net/thread-419521-1-1.html 讲解的非常详细。 2、考虑用JAVA解析8583协议报文的时候,一开始根据协议规则写了一套处理程序。后来同事提点网上有开源的jar包。于是一番折腾从网上找到一堆材料,整理分析下,以便来日方长。 ...

老张的便利贴 2308

嵌入式linux之go语言开发(四)go语言8583协议报文解析

原来的pos用c语言开发的,与银联后台通信走的是8583协议。那么用go来做,得实现个go语言8583协议报文解析 且若想在电脑上跑交易,做个工具。用c语音处理起来不方便。用go还可以在电脑上跑交易。 于是用go语言做一个8583解析,方便使用 https://github.com/yangyongzhen/go8583/ package up8583 import ( "erro...

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 5169

8583报文解析程序

网上搜了一堆,都不怎么好用,就用java写了一个自动解析ISO8583报文的小程序,支持自定义报文域长度数据类型,以适应不同机构的8583报文 https://github.com/eric4784510/easy8583

Eric的博客 919

ISO8583报文工具类

ISO8583报文工具类(组装解析报文)      很久没来csdn了。现在的工作地点在银行,妈的,不让上网啊。 写写博客其实是对自己知识的总结,这么长时间了,也该写点东西了。接触银行的项目,避免不了 遇上8583报文。具体介绍就不细讲了,这个网上一大堆介绍的。关键是怎么去组装解析8583报文? 这个代码还真不好找。在此,我把自己的研究写成一个工具类,看的懂其实很好改写,看不懂就直接拿

down177的专栏 3024

java 封装解析报文_IS08583报文协议包的解析封装java源代码

转自:http://www.cnblogs.com/dengzhaozhe/archive/2009/05/09/1453251.html前段时间做了一个涉及到IS08583报文协议的项目,自己总结写了这篇附有java源代码的文章,希望能给大家提供一些帮助,本文分四个部分介绍IS08583报文协议包的处理及如何解析请求包及怎样封装返回包,一:IS08583包介绍:ISO8583包(简称8583包)...

weixin_33006121的博客 476

8583报文解析

8583报文解析流程

qq_53837461的博客 3737

8583报文解析(二)

现在看是数了,能够看出2、3、4、11、 35、 41、 42、 49这些位置是1.则表示在8583报文中,的2、3、4、11、 35、 41、 42、 49域是传输了数据的。前面10个字节的BCD码(也就是20个BCD码,亦是20个数字)表示报头,在上面报文中报头是在POS中心返回的应答报文中,由POS中心填入处理要求,其他域保持原值返回,POS将根据收到报文头中的处理要求进行相应处理。代表变长,若x为技术,则自动补0,凑足一个bcd码。

weixin_44538423的博客 2301

8583报文举例解读及推荐阅读

一、推荐阅读 https://www.cnblogs.com/fenglan/p/6088690.html 这篇博客生动形象的解释了8583报文,首先推荐给之前一点都不了解8583报文的同学。 然后参照了下面博客,尝试自己理解 https://blog.csdn.net/cbacq/article/details/51495593 若阅读了以上篇博客,还有不懂的,再来看看本文,看能否有一...

松子落 5637

银联iso8583协议报文解析

四个位表示一个bcd码(可以理解成八进制数中1位)八个位表示个字节(可以理解成十六进制数中1位)ANS..6:6位变长数字或字符、特殊字符。ANS4:4位定长数字或字符、特殊字符。ANS6:6位定长数字或字符、特殊字符。AN..6:6位变长数字或字符。二进制中,一个0或1,表示位。AN4:4位定长数字或字符。AN6:6位定长数字或字符。N..6:6位变长数字。

东皋长歌的专栏 2427

银联8583报文规范详解

银联8583报文规范详解自己的理解转载的内容 自己的理解 转载的内容 以下来自转载地址 https://www.jianshu.com/p/203ed7f632cf 一.什么是8583报文规范? 1.8583全称: ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。 2.8583位图: 8583包前面一段为位图,用来确定包的字段域组成情况。 其中位图是8583包的灵魂,它是打包解包确定字段域的关键, 而了解每个字段域的属性则是填写

maqingbin8888的专栏 6450
上一篇: 转:8583报文手动组包——详细分析每个示范域
下一篇: hibernate查询方式和查询策略
amdixuxl14849
博客等级 码龄11年 1粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值