期货交易自动化论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 20|回复: 0

ISO 8583报文是什么 ?是银行卡组织定义的还是各个商业银行前置系统定义的 ? - 第3页 - 金融行业 - ITPUB论坛-专业的IT技术社区

[复制链接] |主动推送

285万

主题

285万

帖子

855万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8553710
发表于 2022-9-11 07:24:55 | 显示全部楼层 |阅读模式
你会发现:
1、定长无分隔符报文最不灵活,没有文档双方无法交换信息(因为你无法理解其中有几个字段、是什么字段),很浪费存储和网络传输的带宽;
2、CSV、PSV之类的节约了存储和网络传输的带宽,但也很不灵活,例如你要加个字段,双方可能要改N个程序;
3、.INI、Json、XML等越来越灵活,但也越来越复杂,也非常浪费存储和网络传输的带宽。
所以在早期银行卡交易的领域,例如ATM机与后台的交易报文,ATM 往往是通过电话拨号建立网络的,速率可能只有2400 bit/s,此时节约带宽是非常重要的,如何设计一个通用的、扩展性比较强的、灵活的、报文又短从而节约带宽的报文交换协议,是个挺有挑战性的课题。
其实在银行卡交易的领域,常用的字段无非是 账号/卡号、交易金额、密码、行号等,
例如你在ATM上取100元,报文需要有这些元素:卡号=1234567890,交易动作=取款,金额=100.00,密码=888888
你在ATM上转账给王五200元,报文需要有这些元素:转出卡号=1234567890,交易动作=转账,金额=200.00,密码=888888,转入卡号=555555555,收款人=王五
如果你设计的报文就像我上面写的:Field1=Value1,Field2=Value2,......
可不可以?当然可以,不过这种Field-Value对与CSV结合的格式虽然很灵活,但是字段名还是很浪费带宽。
ISO 8583 标准的制定者很聪明,他把常用字段用编号规定,例如:
2#字段(Field,也翻译成“域”):账号/卡号,由于各银行的账号/卡号长度不一,因此定义成变长域,在账号/卡号前放一个2位数字表示长度,例如卡号8866123422345678长16位,在报文中可以这样表示:168866123422345678
3#域:处理码,用6位数字表示各种交易类型,如ATM取款、存款、转账等
4#域:交易金额,定长域,无小数点,在我国一般定义其单位为分
......
52#域:密码(密文)
......
64#域:报文验证码(MAC),报文接收者可用来验证该报文是否在传输途中被人篡改。
......
128#域:报文验证码(MAC),报文接收者可用来验证该报文是否在传输途中被人篡改。
然后他再定义128个比特,128/8=16个字节,每个比特他从左到右进行编号,即1到128,用来表示在报文中对应的几号(#)字段是否出现,这16个字节就叫做BITMAP。为了更加节约,他把这16个字节的BITMAP分为前8个字节和后8个字节,分别叫基本的BITMAP和扩展的BITMAP,分别对应2-64#域和65-128#域,而扩展的BITMAP被定义为1#字段。如果某个交易只用到最常用的域,即2-64#中的某些域,就没必要出现扩展的BITMAP的8字节,报文就节约了8字节。
因为每个域都规定了是定长还是变长,变长的域都有长度字节表示,因此在报文中各域的内容间是无分隔符的,节约了带宽。
以前面的在ATM上取100元的报文作为例子,
报文元素:卡号=1234567890,交易动作=取款,金额=100.00,密码=888888
假设不考虑ATM机编号、ATM机交易时间、流水号、银行号、报文验证码(MAC)等域,
则ISO 8583 的报文域:
1#:Extend BitMap,无
2#:账号/卡号,2位变长,值为101234567890
3#:处理码,ATM取款的值为010000
4#:交易金额,12位定长,100元的值表示为000000000100
52#:密码(密文),假设密码888888加密后为 @ $!^*%~
这样报文只有2、3、4、52#域,基本的BITMAP的64比特就是这样:
01110000 00000000 00000000 00000000 00000000 00000000 00010000 00000000
写成16进制就是:
70 00 00 00 00 00 10 00
整个8583标准的报文用C语言的字符串表示就像这样:
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 101234567890010000000000000100@ $!^*%~
你看,8583格式的报文是不是非常短?虽然没有分隔符,但是只要双方都知道按ISO 8583标准来定义,程序还是可以很容易写一个通用的。
由于BITMAP的概念,它变得很灵活。如果你要使用的字段ISO 8583标准未定义,你还可以使用“保留给民间使用”的62#、63#等变长域,其中你可以与通讯的对方约定子域,子域是定长还是变长,或者是XML格式,都可以由双方来约定,这样在标准之外,还可以有相当的灵活性。
ISO8583标准有1987版、1993版、2003版,前2个版本的变长域最长是999,而2003版的部分变长域最长允许9999。
因此ATM取款即使要用你的指纹来验证,把指纹信息放到ISO 8583报文中也是毫无问题的。
ISO8583 ISO8583_1993[] =
{
    0, Bit Map                              , 位元表            ,           , 0, FT_B   , 8,
    1, Bit Map/Extended                        , 扩展位元表          ,           , 0, FT_B   , 8,
    2, Primary Account Number                    , 主帐号            , LLVAR        , 2, FT_N   , 19,
    3, Processing Code                        , 处理代码          ,           , 0, FT_N   , 6,
    4, Amount, Transaction                      , 交易金额          ,           , 0, FT_N   , 12,
    5, Amount, Reconciliation                    , 对帐金额          ,           , 0, FT_N   , 12,
    6, Amount, Cardholder Billing                  , 持卡人签单金额      ,           , 0, FT_N   , 12,
    7, Date and Time, Transmission                , 传输日期和时间      , MMDDhhmmss    , 0, FT_N   , 10,
    8, Amount, Cardholder Billing Fee              , 持卡人签单手续费金额  ,           , 0, FT_N   , 8,
    9, Conversion Rate, Reconciliation              , 对帐兑换率          ,           , 0, FT_N   , 8,
   10, Conversion Rate, Cardholder Billing            , 持卡人签单兑换率      ,           , 0, FT_N   , 8,
   11, Systems Trace Audit Number                  , 系统跟踪审计号      ,           , 0, FT_N   , 6,
   12, Date and Time, Local Transaction              , 本地交易日期时间      , YYMMDDhhmmss  , 0, FT_N   , 12,
   13, Date, Effective                        , 生效日期          , YYMM        , 0, FT_N   , 4,
   14, Date, Expiration                        , 截止日期          , YYMM        , 0, FT_N   , 4,
   15, Date, Settlement                        , 清算日期          , YYMMDD      , 0, FT_N   , 6,
   16, Date, Conversion                        , 兑换日期          , MMDD        , 0, FT_N   , 4,
   17, Date, Capture                          , 受理日期          , MMDD        , 0, FT_N   , 4,
   18, Merchant Type                          , 商户类型          ,           , 0, FT_N   , 4,
   19, Country Code, Acquiring Institution            , 代理机构国家代码      ,           , 0, FT_N   , 3,
   20, Country Code, Primary Account Number          , 主帐号国家代码      ,           , 0, FT_N   , 3,
   21, Country Code, Forwarding Institution          , 发送机构国家代码      ,           , 0, FT_N   , 3,
   22, Point of Service Data Code                  , 服务点数据代码      ,           , 0, FT_AN , 12,
   23, Card Sequence Number                      , 卡顺序号          ,           , 0, FT_N   , 3,
   24, Function Code                          , 功能代码          ,           , 0, FT_N   , 3,
   25, Message Reason Code                      , 报文理由代码        ,           , 0, FT_N   , 4,
   26, Card Acceptor Business Code                , 受卡方业务代码      ,           , 0, FT_N   , 4,
   27, Approval Code Length                      , 批准代码长度        ,           , 0, FT_N   , 1,
   28, Date, Reconciliation                      , 对帐日期          , YYMMDD      , 0, FT_N   , 6,
   29, Reconciliation Indicator                  , 对帐指示符          ,           , 0, FT_N   , 3,
   30, Amounts, Original                        , 原始金额          ,           , 0, FT_N   , 24,
   31, Acquirer Reference Data                    , 代理方参考数据      , LLVAR        , 2, FT_ANS , 99,
   32, Acquirer Institution ID Code                , 代理方机构标识码      , LLVAR        , 2, FT_N   , 11,
   33, Forwarding Institution ID Code              , 发送机构标识码      , LLVAR        , 2, FT_N   , 11,
   34, Primary Account Number, Extended              , 扩展的主帐号        , LLVAR        , 2, FT_NS , 28,
   35, Track 2 Data                          , 第二磁道数据        , LLVAR        , 2, FT_Z   , 37,
   36, Track 3 Data                          , 第三磁道数据        , LLLVAR      , 3, FT_Z   , 104,
   37, Retrieval Reference Number                  , 检索参考号          ,           , 0, FT_ANP , 12,
   38, Approval Code                          , 批准代码          ,           , 0, FT_ANP , 6,
   39, Action Code                            , 动作代码          ,           , 0, FT_N   , 3,
   40, Service Code                          , 服务代码          ,           , 0, FT_N   , 3,
   41, Card Acceptor Terminal ID                  , 受卡方终端标识      ,           , 0, FT_ANS , 8,
   42, Card Acceptor ID Code                    , 受卡方标识代码      ,           , 0, FT_ANS , 15,
   43, Card Acceptor Name/Location                , 受卡方名称/地点      , LLVAR        , 2, FT_ANS , 99,
   44, Additional Response Data                  , 附加响应数据        , LLVAR        , 2, FT_ANS , 99,
   45, Track 1 Data                          , 第一磁道数据        , LLVAR        , 2, FT_ANS , 76,
   46, Amounts, Fees                          , 手续费金额          , LLLVAR      , 3, FT_ANS , 204,
   47, Additional Data - National                  , 附加数据-国家        , LLLVAR      , 3, FT_ANS , 999,
   48, Additional Data - Private                  , 附加数据-民间        , LLLVAR      , 3, FT_ANS , 999,
   49, Currency Code, Transaction                  , 交易货币代码        ,           , 0, FT_A   , 3,
   50, Currency Code, Reconciliation                , 对帐货币代码        ,           , 0, FT_A   , 3,
   51, Currency Code, Cardholder Billing            , 持卡人签单货币代码    ,           , 0, FT_A   , 3,
   52, Personal ID (PIN) Data                    , 用户密码PIN数据      ,           , 0, FT_B   , 8,
   53, Security Related Control Information          , 安全控制信息        , LLVAR        , 2, FT_B   , 48,
   54, Amounts, Additional                      , 附加金额          , LLLVAR      , 3, FT_ANS , 120,
   55, Integrated Circuit Card System Related Data      , IC卡系统相关数据      , LLLVAR      , 3, FT_B   , 48,
   56, Original Data Elements                    , 原始数据元          , LLVAR        , 2, FT_N   , 35,
   57, Authorization Life Cycle Code                , 授权生命周期代码      ,           , 0, FT_N   , 3,
   58, Authorizing Agent Institution ID Code          , 授权代理机构标识代码  , LLVAR        , 2, FT_N   , 11,
   59, Transport Data                          , 传输数据          , LLLVAR      , 3, FT_ANS , 999,
   60, Reserved for National Use                  , 保留给国家使用      , LLLVAR      , 3, FT_ANS , 999,
   61, Reserved for National Use                  , 保留给国家使用      , LLLVAR      , 3, FT_ANS , 999,
   62, Reserved for Private Use                  , 保留给民间使用      , LLLVAR      , 3, FT_ANS , 999,
   63, Reserved for Private Use                  , 保留给民间使用      , LLLVAR      , 3, FT_ANS , 999,
   64, Message Authentication Code Field            , 报文鉴别代码字段      ,           , 0, FT_B   , 8,
   65, Reserved for ISO                        , 保留给ISO使用        ,           , 0, FT_B   , 8,
   66, Amounts, Original Fees                    , 原始手续费金额      , LLLVAR      , 3, FT_ANS , 204,
   67, Extended Payment Data                    , 扩展的付款数据      ,           , 0, FT_N   , 2,
   68, Country Code, Receiving Institution            , 接收机构国家代码      ,           , 0, FT_N   , 3,
   69, Country Code, Settlement Institution          , 清算机构国家代码      ,           , 0, FT_N   , 3,
   70, Country Code, Authorizing Agent Institution      , 授权代理机构国家代码  ,           , 0, FT_N   , 3,
   71, Message Number                          , 报文编号          ,           , 0, FT_N   , 8,
   72, Data, Record                          , 数据记录          , LLLVAR      , 3, FT_ANS , 999,
   73, Date, Action                          , 动作日期          , YYMMDD      , 0, FT_N   , 6,
   74, Credits, Number                        , 贷记笔数          ,           , 0, FT_N   , 10,
   75, Credits, Reversal Number                  , 撤消贷记笔数        ,           , 0, FT_N   , 10,
   76, Debits, Number                          , 借记笔数          ,           , 0, FT_N   , 10,
   77, Debits, Reversal Number                    , 撤消借记笔数        ,           , 0, FT_N   , 10,
   78, Transfer, Number                        , 转帐笔数          ,           , 0, FT_N   , 10,
   79, Transfer, Reversal Number                  , 撤消转帐笔数        ,           , 0, FT_N   , 10,
   80, Inquiries, Number                        , 查询笔数          ,           , 0, FT_N   , 10,
   81, Authorizations, Number                    , 授权笔数          ,           , 0, FT_N   , 10,
   82, Inquiries, Reversal Number                  , 撤消查询笔数        ,           , 0, FT_N   , 10,
   83, Payments, Number                        , 付款笔数          ,           , 0, FT_N   , 10,
   84, Payments, Reversal Number                  , 撤消付款笔数        ,           , 0, FT_N   , 10,
   85, Fee Collections, Number                    , 手续费收取笔数      ,           , 0, FT_N   , 10,
   86, Credits, Amount                        , 贷记金额          ,           , 0, FT_N   , 16,
   87, Credits, Reversal Amount                  , 撤消贷记金额        ,           , 0, FT_N   , 16,
   88, Debits, Amount                          , 借记金额          ,           , 0, FT_N   , 16,
   89, Debits, Reversal Amount                    , 撤消借记金额        ,           , 0, FT_N   , 16,
   90, Authorizations, Reversal Number              , 撤消授权笔数        ,           , 0, FT_N   , 10,
   91, Country Code, Transaction Destination Institution , 交易终点机构国家代码  ,           , 0, FT_N   , 3,
   92, Country Code, Transaction Originator Institution  , 交易发起机构国家代码  ,           , 0, FT_N   , 3,
   93, Transaction Destination Institution ID Code      , 交易终点机构标识代码  , LLVAR        , 2, FT_N   , 11,
   94, Transaction Originator Institution ID Code      , 交易发起机构标识代码  , LLVAR        , 2, FT_N   , 11,
   95, Card Issuer Reference Data                  , 发卡方参考数据      , LLVAR        , 2, FT_ANS , 99,
   96, Key Management Data                      , 密钥管理数据        , LLLVAR      , 3, FT_B   , 999,
   97, Amount, Net Reconciliation                  , 净对帐金额          ,           , 0, FT_XN , 16,
   98, Payee                                , 收款人            ,           , 0, FT_ANS , 25,
   99, Settlement Institution ID Code              , 清算机构标识代码      , LLVAR        , 2, FT_AN , 11,
100, Receiving Institution ID Code                , 接收机构标识代码      , LLVAR        , 2, FT_AN , 11,
101, File Name                            , 文件名            , LLVAR        , 2, FT_ANS , 17,
102, Account ID 1                          , 帐户标识1          , LLVAR        , 2, FT_ANS , 28,
103, Account ID 2                          , 帐户标识2          , LLVAR        , 2, FT_ANS , 28,
104, Transaction Description                    , 交易说明          , LLLVAR      , 3, FT_ANS , 100,
105, Credits, Chargeback Amount                  , 反向贷记金额        ,           , 0, FT_N   , 16,
106, Debits, Chargeback Amount                  , 反向借记金额        ,           , 0, FT_N   , 16,
107, Credits, Chargeback Number                  , 反向贷记笔数        ,           , 0, FT_N   , 10,
108, Debits, Chargeback Number                  , 反向借记笔数        ,           , 0, FT_N   , 10,
109, Credits, Fee Amounts                      , 手续费贷记金额      , LLVAR        , 2, FT_ANS , 84,
110, Debits, Fee Amounts                      , 手续费借记金额      , LLVAR        , 2, FT_ANS , 84,
111, Reserved for ISO Use                      , 保留给ISO使用        , LLLVAR      , 3, FT_ANS , 999,
112, Reserved for ISO Use                      , 保留给ISO使用        , LLLVAR      , 3, FT_ANS , 999,
113, Reserved for ISO Use                      , 保留给ISO使用        , LLLVAR      , 3, FT_ANS , 999,
114, Reserved for ISO Use                      , 保留给ISO使用        , LLLVAR      , 3, FT_ANS , 999,
115, Reserved for ISO Use                      , 保留给ISO使用        , LLLVAR      , 3, FT_ANS , 999,
116, Reserved for National Use                  , 保留给国家使用      , LLLVAR      , 3, FT_ANS , 999,
117, Reserved for National Use                  , 保留给国家使用      , LLLVAR      , 3, FT_ANS , 999,
118, Reserved for National Use                  , 保留给国家使用      , LLLVAR      , 3, FT_ANS , 999,
119, Reserved for National Use                  , 保留给国家使用      , LLLVAR      , 3, FT_ANS , 999,
120, Reserved for National Use                  , 保留给国家使用      , LLLVAR      , 3, FT_ANS , 999,
121, Reserved for National Use                  , 保留给国家使用      , LLLVAR      , 3, FT_ANS , 999,
122, Reserved for National Use                  , 保留给国家使用      , LLLVAR      , 3, FT_ANS , 999,
123, Reserved for Private Use                  , 保留给民间使用      , LLLVAR      , 3, FT_ANS , 999,
124, Reserved for Private Use                  , 保留给民间使用      , LLLVAR      , 3, FT_ANS , 999,
125, Reserved for Private Use                  , 保留给民间使用      , LLLVAR      , 3, FT_ANS , 999,
126, Reserved for Private Use                  , 保留给民间使用      , LLLVAR      , 3, FT_ANS , 999,
127, Reserved for Private Use                  , 保留给民间使用      , LLLVAR      , 3, FT_ANS , 999,
128, Message Authentication Code Field            , 报文鉴别代码字段      ,           , 0, FT_B   , 8,
};复制代码
bankman 发表于 2012-12-28 23:51

这个论坛发CODE 还是太难看了。对齐就那么难吗?

谢谢您细致的回复,建议重开一帖,以附件的形式发帖,这样就不会有对齐的麻烦了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|期货交易自动化论坛

GMT+8, 2024-11-28 10:40 , Processed in 0.116310 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表