Iso-8583协议
ISO-8583得流程
1:打包
1:把数据放入数据结构中
2:对数据进行检验并对位图进行处理
3:对数据压缩并送出去
2:解包
1:获得数据
2:对数据按8583格式进行解包
上位机
ISO-8583的下一层
将上位机中得数据发给ISO-8583数据结构
ISO-8583
获得ISO-8583解包得数据
将打包压缩的数据发送给下一层
将数据发送给8583进行处理
ISO-8583采用的数据机构
typedef struct
{
int domain_flag;//域类型 0:char,1:int,2:Binary;
char *domain_name;//域名
int domain_byte_length;//数据元初始的长度(如为定长,则为此值,如为不定长,则为最大长度);
int domain_real_length;//数据域的实际长度(如果为变长则存放的是变长+数据字节的长度)
int length_flag;//变长标志0:否,2:2位变长,3:3位变长
int domain_data_flag;//数据元类型0:a {字母[a-z,A-Z],1 元素= 1 字节},
//1:an{字母[a-z,A-Z],数字[1-9],1元素= 1 字节},
//2:ans{字母,数字和特殊字[所有字] 1元素= 1字节},
//3:b {二进制数, 1元素= 1 字节},
//4:n {数字数据,2 元素= 1字节},
//5:z {按GB/T 15120和GB/T 17552的2、3磁道编码, 2 元素= 1 字节}
char *domain_data_value;//数据元的值
int attribute; /*保留*/
}ISO_8583
ISO-8583
每个交易报文包含报文头和报文内容组成。
报文头[TPDU]为5字节构成如下:报文类型ID[1字节]+源设备地址[2字节]+目的设备地址[2字节];
报文内容都由三部分按以下顺序组成:消息类型标识,位图和数据元素。
Iso-8583得报文:
报文得内容(重点是如下几个问题):
1:消息类型标识
每个消息类型标识时报文内容得头.
占用四个字节,
2:位图
位图是8583包的灵魂,它是打包解包确定字段域的关键, 而了解每个字段域的属性则是填写数据的基础, 在此中用8个字节(1个字节为8位,则为8*8=64),然后根据域中规定的长度来取数据,这样解包就很方便了,,如有,则在相应的位图中的位置放置1,来标识此域中有数据
0
1
0
1
0
…...
打包与解包:
为第1个域中有数据
为第三个域中有数据
3:数据元素
1:数据元素的压缩
1:如果数据元素为数字,则才用压缩的BCD码来压缩数据,以便于在网络中传输
2:如果为字母用ASCII 码表示的字节的数
2:数据元素的定长与不定长
1:如为定长,则用压缩的BCD码来处理,
2:如为不定长,则才用字节的长度值+ 字节的数据(其中长度值采用压缩的BCD码,而字节的数据如为字母则才用ASCII码来表示,如为数字则也用压缩的BCD码)
磁条卡的原理
磁条 银行卡磁条的特性、编码技术及编码字符集应符合GB/T 。一: 第1磁道的信息格式 第1磁道数据编码最大记录长度为79个字符,数据字段的顺序和长度应与表1给出的第1磁道信息格式一致。第1磁道为只读磁道。二: 第2磁道的信息格式 第2磁道数据编码最大记录长度为40个字符,数据字段的顺序和长度应与表2给出的第2磁道信息格式一致。第2磁道为只读磁道。
表1 第1磁道信息格式
字段
D=动态
S=静态
字段长度
备注
序号
名称
1
起始标志
S
1
“%”,
2
格式代码
S
2
“99”,
3
主账号
S
13-19
4
字段分隔符
S
1
“∧”,
5
姓名
S
2-26
6
字段分隔符
S
1
“∧”,
7
失效日期
S
4
YYMM,
8
服务代码
S
3
9
附加数据
S
可变
10
结束标志
S
1
“?”,
11
纵向冗余校验位
S
1
表2 第2磁道信息格式
字段
D=动态
S=静态
字段长度
备注
序号
名称
1
起始标志
Iso-8583协议与磁条卡 来自淘豆网m.daumloan.com转载请标明出处.