ISO8583 入门介绍

refer url : http://jimmod.com/blog/2011/07/25/jimmys-blog-iso-8583-introduction-beginners-tutorial/


最近,我接受了一些银行项目,让我更加的理解银行和金融交易。
所有的金融交易用的是ISO8583标准,一开始以为很复杂,了解了以后明白了并没有想象的那么 复杂。
即使ISO8583是个标准,我也看到了很多变体的实现。
金融交易是两个系统之间通过socket协议进行交互的。
连接建立后,每个系统可以发送ISO8583格式的消息,其他系统将响应。
以我的经验看,会话由sign on开始并且金融交易定期的发送Echo类型消息已确保其他系统还是alive的。
写个流程:
1、系统A和B准备连接(通过IP和PORT)
2、连接建立
3、A发送开始Sign-On请求消息
4、B发送Sign-On响应消息。
5、A将启动,并且定期发送Echo类型请求消息(例如:每隔一分钟)
6、B将针对每一个Echo类型请求消息发送响应消息。
7、当金融交易发生时,A将发送交易请求消息。
8、B系统发送交易响应消息。
9、如果中间出现了状况(一般A得到响应消息超时),A将发送回滚请求去取消前面的那个交易。
10、B将发送回滚响应消息。
希望以上工作流能起到简单清晰理解的作用。
下面将具体的解析ISO8583 message。 我们可以将其分为3部分:
1、消息类型标识
2、位图
3、数据项。
|MTI | BITMAPS | DATA ELEMENTS | 
ISO8583 结构
消息类型标识:
MTI  Message Type Identifier
占用4个数字来描述消息的类型,一般使用如下:
02xx: 金融消息(eg:0200 请求 , 0210 响应)
04xx: 回滚消息(eg: 0400 请求 , 0410 响应)
08xx: 网络管理消息(eg: 0800 请求, 0810 响应。)
位图:
位图字段是为data elment 服务的,可以转换为16进制的字符。
eg:
B220000000100000
转换为2进制:
1011001000100000000000000000000000000000000100000000000000000000
由位图内的1位可以解析到那些数据项有用。上例中表示:1,3,4,7,11 数据项有用。
位图的第一位有个特殊的作用,如果第一位是1的话,意味着有第二个位图。到底什么是第二位图呢?
由于16个16位字符只能包含进64位数据,一些交易包含64-128数据项, 那意味着16个16禁止字符是不够的。 将第一位设置为1意味着有另外一个位图。又是另外一个16个16进制字符。
如此,全部的位图例子将是:
B2200000001000000000000000800000
转换为2进制  10110010001000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000000000000000
上面位图表示,数据项在 3,4,7,11,105
数据项:
数据项是ISO消息的根本,包含着关于交易的信息(交易类型,数量,客户id等等)
每一个数据项有他们的格式,属性和长度。
每一个数据项有他们自己标准的作用,例如:DE #4 是交易数量
我将基于上面的例子进行解释,尤其这里只是入门,我不想让初学者混乱。维基百科有全部的列表
针对我们的例子,数据项列表如下:
#3 - 处理码  - n 6
#4 - 交易量  - n 12
#7 - 交易时间 - n 10
#11 - 系统跟踪审计数量 -n 6
#44 - 附加的相应内容 -an ..25
#105 - ISO保留  -ans ...999
应用与实际,举个例子:
我们打算发送:
DE #3 : 201234
DE #4 : 10000
DE #7 : 1107221830
DE #11 : 123456
DE #44 : A5DFGR
DE #105 : ABCDEFGHIJ 1234567890
用上面的内容,在数据项内将生成
img url : http://128.199.204.41/blog/wp-content/uploads/2011/07/ISO8583-de2.png
每个类型的值都将被格式化。

采用ASCII编码,数字和字母都占用8bit

a :  阿拉伯字符
n : 数值类型
s :  特殊字符
x(没有点): 固定长度x
.x(一个点): 最大长度x ,一个数字在前面作为长度标识
..xx(两个点):最大长度xx ,两个数字在前面做为长度标识。
...xxx(3个点):最大长度xxx,3个数字在前面作为长度标识。
上面的例子转换为ISO消息将变成:0200B2200000001000000000000000800000201234000000010000110722183012345606A5DFGR021ABCDEFGHIJ 1234567890
0200  |  B2200000001000000000000000800000 |    201234000000010000110722183012345606A5DFGR021ABCDEFGHIJ 1234567890


总结:
好了,这篇文章够长了。
实际上我喜欢短的文章,但是在这个事情上短不了了。
总之,我希望这篇文章说的清楚了。 
像一如既往的那样,记录丢弃你当前正在困惑的问题。
下面,我将写 用JPOS库继承ISO8583 相关的文章。
















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值