ISO8583手机端打包—— iOS库

前言

通常刷卡交易中是用到的8583报文是在前置后台打包,或是在POS端打包,手机端只是作为通信链路的媒介存在,不作为打包方案。

也有少数用户(不在意安全……)会使用手机端打包。
anyway,写了一个iPhone端打包的iOS util.

github项目地址

简介

  • ISO8583是金融行业中,有关金融交易的电子信息交换应用规范。
  • ISO8583国际标准设计了一个保证在采用不同应用规范的系统间能够进行信息交换的界面规范。各应用规范可保持在专用级别上。在信息可以转换成能够进行国际交换的界面格式这一总的约束条件下,各应用系统的设计者可享有完全的灵活性。
  • ISO8583标准使用一个称为“比特图”的概念,在此,对每个数据元在控制字段或比特图中分配一个位置标记。在一个具体信息中,数据元存在则在指定的位置上用“1”标明,数据元不存在则用“0”标明。
  • 各个系统所采用的信息格式取决于个系统签约双方的商务关系。ISO8583标准定义的数据格式能构保证符合标准的个系统总是兼容的。
  • POS终端上送POS中心的消息报文结构
    包括TPDU、报文头和应用数据三部分:
    • ——TPDU说明:长度为10个字节, 压缩时用BCD码表示为5个字节长度的数值。(TPDU决定了终端与系统之间的网络协议)
    • ——报文头说明:总长度为12字节,压缩时用BCD码表示为6个字节长度的数值。
      在POS上送的请求/通知报文中,该数值由POS终端应用程序在打包上送时根据POS终端参数和当前状态填入应用类别、软件总版本号、终端状态和软件分版本号(具体指各厂商的程序版本号),用于POS中心根据数值进行相应的处理。
      在POS中心返回的应答报文中,由POS中心填入处理要求,其他域保持原值返回,POS将根据收到报文头中的处理要求进行相应处理。
  • —— 8583 Msg 应用数据

ISO8583信息结构

  • ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分;其中位图是8583包的灵魂,它是打包解包确定字段域的关键,而了解每个字段域的属性则是填写数据的基础。

  • 本国际标准标识的每一信息按顺序结构排列:信息类型识别符(4位数字)一个或多个比特图和一个按比特图表述的顺序排列的数据元序列如下图

  • 基本比特图信息结构:

  nnnn |0_______________|_______________________________|
       |(01)--------(64)|----------  数据元  -----------|      
 信息码      比特位置
 扩展的比特图信息结构:
  nnnn |1_____________|0___________|__________________|
       |(01)------(64)|(65)---(128)|------数据元------|                    
 信息码      比特位置

信息类型识别符

  • 信息类型识别符一个4位数字的数字型字段,它描述每一信息的类型和功能。所有信息都用一个信息类型识别符开始

  • 第1位和第2位数字标明信息类别:
    00xx 保留给iso使用
    01xx 授权信息
    02xx 金融交易信息
    03xx 文件更新信息
    04xx 撤销信息
    05xx 对帐控制信息
    06xx 管理信息
    07xx 保留给iso使用
    08xx 网络管理信息
    09xx-79xx 保留给iso使用
    80xx-89xx 保留给国家使用
    90xx-99xx 保留给民间使用

  • 比特图(位图 bitMap)
    信息的第二部分构成是一个或多个比特图,该比特图由64个位构成,左边位为“1”。每一位用“1”或“0”表示与该特定位有关的数据元信息的存在或不存在。基本的比特图(1-64位)总是存在的,最常用的数据元依这些比特位置进行排序。不常用的数据元依辅助的比特图(65-128位)进行排序。辅助的比特图如果存在,则由基本的比特图中01位取值为“1”标明(扩展的比特图)
    比特图的第一位取值为“1”,表明其后紧接有一个辅助的比特图如图:

  • 数据类型
    信息的第三部分构成及其数据内容由一系列数据元组成。
    利用比特图作为已存在数据元的一个索引,对信息进重组。一些数据元有固定长度,另一些数据元的长度不固定。任何指定的可变长度数据元的实际长度有其固定的长度前缀决定。
    A 字母向左靠,右部多余部分填空格。
    AN 字母和/或数字,左靠,右部多余部分填空格。
    ANS 字母、数字和/或特殊符号,左靠,右部多余部分填空格。
    AS 字母和/或特殊符号,左靠,右部多余部分填空格。
    B 二进制bit位。
    N 数值,右靠,首位有效数字前充零。若表示金额,则最右二位为角分。1.00 = 00 00 00 00 01 00
    S 特殊符号。
    DD 日。
    hh 时。
    MM 月。
    mm 分。
    ss 秒。
    YY 年。
    Z 由ISO 7811和ISO 7813制定的磁条卡第二、三磁道的数据类型。
    X 借贷符号,在数值之前,D表示借,C表示贷。
    LL 可变长域的长度值(二位数)。
    LLL 可变长域的长度值(三位数)。
    VAR 可变长域。
    CN BCD压缩编码数值。
    变量XYZ的数据类型为ANS...999(LLLVAR),则表示:该变量中可含字母、数字和特殊符号,最长不超过999个字符,长度由三位数字确定。
    变量XYZ的数据类型为N...999(LLLVAR),则在压缩时,其长度位用右靠的BCD码压缩,而其后紧随的数字内容用左靠的BCD码压缩。这是为了保证有效内容和其位数中间无缺省填充值。若不为偶数位,左靠的数字内容后补零。由于有长度位表征该域有效内容的长度,因此后补零不会改变该域的真实值。

你可能感兴趣的:(ISO8583手机端打包—— iOS库)