c#8583_简单聊聊ISO8583报文

本文介绍了ISO8583协议的基本概念,包括数据格式和符号定义,并以C#代码展示了如何处理LLVAR、LLLVAR、BCD等数据格式。通过讲解初始化、打包和解包的过程,帮助读者理解8583报文的处理方法,特别是如何根据位图确定域值并进行不同格式的对齐操作。
摘要由CSDN通过智能技术生成

网上应该有不少关于8583的文章,这个算是属于老生常谈了,但是要找一篇细致的,容易理解的可能还真不太好找,那我们今天就来简单的聊聊。

8583协议是基于ISO8583报文国际标准的包格式的通讯协议,8583包最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。8583包前面一段为位图,它是打包解包确定字段域的关键代替。8583协议多在POS机的开发上使用。 —— 百度百科

数据格式及符号定义

这个其实银联给的文档上已经很全了,我们再复习下

—— M 强制域(Mandatory),此域在该消息中必须出现否则将被认为消息格式出错。

—— C 条件域(Conditional),此域在一定条件下出现在该消息中,具体的条件请参考备注中的说明。

—— O 选用域(Optional),此域在该消息中由发送方自选。

—— Space 此域在该种消息中不出现。

—— A 字母a-z

—— n 数字0-9

—— s 特殊字符

—— an 字母和数字字符

—— ans 字母、数字和特殊字符

—— MM 月

—— DD 日

—— YY 年

—— hh 小时

—— mm 分

—— ss 秒

—— LL 允许的最大长度为99

—— LLL 允许的最大长度为999

—— VAR 可变长度域

—— b 数据的二进制表示,后跟数字表示位(bit)的个数

—— B 用于表示变长的二进制数,后跟数字表示二进制数据所占字节(Byte)的个数

—— z 按GB/T 15120和GB/T 17552的2、3磁道编码

—— cn BCD压缩编码数值

其它的都不说了,我们就聊聊 LLVAR、LLLVAR BCD这三个数据格式吧

LLVAR 代表两位变长,允许该域的最大长度就是99,比如说35域,二磁道数据,那它在8583报文当中的表现形式就是是37 L(len)+"6225xxxxxxx"V(value),表示长度37,数据就是实际的卡磁数据(当然有些地方,长度可能不会是37,因为算法的原因,每家支付公司都会有自己变种的算法,但是实际上规则不变,就是长度+数据,长度在99以内)

-LLLVAR 代表三位变长,允许该域的最大长度是999,比如说60域,消费的时候存放的是

-BCD 不是传统的8421BCD编码,类似这样的一个长度为8的HEX字符串“22001686”如果转换为BCD 就会变成一个长度为4的数组0x22,0x00,0x16,0x86,长度显示为0x00,0x08

OK,这些基本的概念统一后,我们就可以上干货了(网上大部分都是C的,咱们今天来个C#的,方便在PC上调试),看下面代码,首先是刚刚咱们说的数据格式,还有8583每条记录的数据结构

public enum Iso8583DataType

{

///

/// 字母字符,A至Z或a至z,左靠,右部多余部分填空格

///

A,

///

/// 二进制位,左靠,右部多余部分填零。

///

B,

///

/// 数字字符,0至9,右对齐,左补零。若表示金额,无小数点符号,最后两位表示角分

///

N,

///

/// 特殊字符

///

S,

///

/// 借贷符号,贷记为“C”,借记为“D”,后接一个数字型金额数据元。

///

X,

///

/// 由ISO 7811和ISO 7813制定的磁卡第二、三磁道数据

///

Z,

///

/// 字母或数字,左靠,右部多余部分填空格

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值