寂井浮廊
打赏我
欢迎您: 
游客
   
登录
  发现BUG请联系jintianhu2000@126.com
常用
加解密算法
常用工具
EMV相关
还珠楼论坛
答题闯关
用户信息
帖子列表
语法介绍
帖子详情
ISO8583报文协议介绍
jin.th 发布于2018-11-27 14:55
[评论区]
[我要回复]
[下载md文件]
[下载pdf文件]
仅自己可见
## 什么是8583包? ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。 8583包前面一段为位图,用来确定包的字段域组成情况。 其中位图是8583包的灵魂,它是打包解包确定字段域的关键, 而了解每个字段域的属性则是填写数据的基础。 ## 域 域分标准域(64个域)和扩展域(128个域),正常情况下使用标准域就已经足够,若需要扩展,只需将位图的第一个位标记为1。就是说,实际上可使用的域有63个或者127个。 ISO标准中规定的可变长度域最长可以达到999个字节 ## 什么是位图? 在8583数据包的最前面有一块64位或者128位的区域(即8个字节或16个字节),用来表示后面的数据区具体使用了哪些域。 例如: 01100...表示后面数据区使用了第二和第三个域,查下面的技术文档可知,第二个和第三个域分别为“主账号”和“交易处理码 ”,主账号变量类型为 LLVAR,“交易处理码 ”的变量类型是长度为6的定长变量。 ![image](/upload/BBS/314476c9-919b-4584-8052-19ad6750a63a.jpg) 如果一个位为0,与之对应的域不出现在报文中; 如果一个位为1,与之对应的域出现在报文中。 **第一位图** ![image](/upload/BBS/384fc036-272a-4459-ae9e-796d49ec45db.jpg) **第二位图** ![image](/upload/BBS/bc3e5fd0-ef1a-41f0-964f-ef41194c5075.jpg) 图的第一位指明了主位图后是否有位图二。和主位图相同,位图二也由64个二进制位(八字节)构成。可以认为位图二是主位图的扩展,和域65到128相对应。 ## 举例说明 ![image](/upload/BBS/e973b0e6-2961-4ad3-bbc7-b5a0af3c4abc.jpg) ![image](/upload/BBS/e1c9557a-2f40-404d-8032-4588b465c390.jpg) ![image](/upload/BBS/da707a9b-231c-47e6-baa9-b6464c996650.jpg) ## 字段类型属性 ![image](/upload/BBS/d4611a5c-b057-44e1-8a87-dad9240854ed.jpg) **字段长度** 固定长度位数。例如,n10表示10个字节的数字字段。示例:an10表示10个字节的数字字符字段。 可变长度位数。示例:n…4表示最长为4个字节的可变长数字字段。示例:an…7表示最长为7个字节的可变长数字字符字段。 ## 数据表示方法 所有数据ASCII显示格式表示,字符集合的确定取决于配置情况。 示例: > ans 5 =”123AB” → 31 32 33 41 42 (HEXA) 所有数据类型为 “b”(二进制)的字段按照其十六进制数值显示表示法编码。 示例: > b8 = 0x34 → 34(HEXA) 数据中给出的所有长度均表示需要的逻辑位数。 示例: > n12=12个数字 所有固定长度类型字段的数据在8583报文中可采用左右对齐,空位补零或空格。 示例:长度为4的数据“100”的数据在报文中为右对齐补零: > n4=”100” → 30 31 30 30 (HEXA) 示例:长度为6的数据“123AB”的数据在报文中为左对齐补空格: > ans6=”123AB” → 31 32 33 41 42 20 (HEXA) ---- 在8583报文中,所有类型为LLVAR的字段长度占用两个个字节,类型为LLLVAR字段长度为三个字节。 示例:下面数据的长度分别为8、16、15,变长字段的类型分别为LLVAR和LLLVAR。 > ans..16=”1234567A” → 30 38 31 32 33 34 35 36 37 41 (HEXA) n..19=”1234567890123456” → 31 36 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 (HEXA) n…999=”123456789012345” → 30 31 35 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 (HEXA) 当某字段表示金额时,格式中不带小数点。 示例: 金额23.47表示为 2347。 ## 报文中的表示形式 所有BCD编码均采用8421编码,字节数为原来的一半 示例: > 30 31 30 30 (HEXA)->01 00(BCD) 所有ASCII和BINARY类型的字节数不变,数据也不做处理 示例: > 30 31 30 30 (HEXA)->30 31 30 30(ASCII或BINARY) ## 其他术语 消息类型:将消息分为金融类,授权类,管理类等等,固定为4个字节,报文中以BCD码压缩为2个字节 域的类型: M 强制域(Mandatory),此域在该消息中必须出现否则将被认为消息格式出错。 C 条件域(Conditional),此域在一定条件下出现在该消息中,具体的条件请参考备注中的说明。 O 选用域(Optional),此域在该消息中由发送方自选。 ## 牛刀小试 **原始数据(签到应答报文)** ![image](/upload/BBS/c36906f6-5089-4a04-aa88-cd8e0cdd12fb.jpg) **第一步** ![image](/upload/BBS/5a01e9d9-4969-468f-85ac-d2734f5e5dfc.jpg) **第二步** ![image](/upload/BBS/8215ff9a-9dc9-4193-aa8f-daec43763a13.jpg) **第三步** ![image](/upload/BBS/f2a83f1d-1979-4c29-9e7a-d073e7821c53.jpg) **第四步** 还原数据,根据文档还原数据所代表的含义 例如:11域的数据还原后为000008,查看文档可知,11域表示的是交易流水号,所以本次交易的流水号就是000008
评论列表
回帖
浙ICP备17051204号