首页 > 代码库 > 社保系列6——账户划入交易
社保系列6——账户划入交易
通过账户划入交易,持卡人可将其在基本医疗保险个人账户上的资金划入卡内基本医疗保险个人账户中。
特点:
1) 终端上联网进行
2) 提交个人密码(PIN)(如持卡人设置)
步骤:
1) 终端:启动账户划入交易(INITIALIZEFOR LOAD)
2) IC卡:处理INITIALIZEFOR LOAD命令
3) 检查是否支持命令中提供的密钥(DLK)索引号(NO:9403).
4) 产生过程密钥(SESPK):伪随机数(ICC)||基本医疗保险个人帐户划入交易序号||‘8000’
5) 产生MAC1:基本医疗保险个人帐户余额+交易金额+交易类型+终端机编号
6) 终端:验证MAC1,主机将生成SESLK并确认MAC1是否有效。
7) 回送错误状态:如果不接受帐户划入交易,则主机应通知终端
8) 交易处理:扣减帐户划入金额,产生一个报文鉴别码(MAC2)
9) 发出“CREDITFOR LOAD”命令:更新卡内基本医疗保险个人帐户
10) IC卡:验证MAC2(NO:9302).
11) 交易处理:个人帐户划入交易序号加1,交易金额累加到基本医疗保险个人帐户余额上,更新交易明细
12) 返回确认:IC卡将TAC回送给终端
[cpp] view plaincopyprint?
- 00A404000F7378312E73682EC9E7BBE1B1A3D5CF
- 0020000003123456 //验证pin
- 00A4040006D15600000503 //DF04:社会保险信息区
- MONEY=00100000
- DLK=00000000000000000000222000000000
- DTK_=00000000011111000000666000220000
- DTKL=copy(DTK_,0,16)
- DTKR=last(DTK_,16)
- DTK=XOR(DTKL,DTKR)
- //社保初始化帐户划入:密钥索引号(DLK:01) + 交易金额 + 终端机编号
- B02800010B+01+MONEY+130000000001 //DLK
- 00C0000010(ST+9000)
- //CIA余额 4字节
- //联机交易序号 2字节
- //密钥版本号 1字节
- //算法标识 1字节
- //伪随机数 4字节
- //MAC1 4字节
- LM=COPY(ST,1,8)//CIA余额
- CN=COPY(ST,9,4)//交易序号
- WS=COPY(ST,17,8)//伪随机数
- //计算帐户划入交易过程密钥SESLK
- ECB_3DES_EN(WS+CN+8000,DLK,SESLK)//DLK帐户划入用来产生过程密钥
- //计算MAC1,数据为:16个0 + CIA余额 + 交易金额 + 交易类型(此处要转为ACSII码) + 终端机编号 + 80(补足长度)
- SDES_MAC(0000000000000000+LM+MONEY+31+130000000001+80,SESLK,MAC1)
- //MAC2,数据为:16个0 + 交易金额 + 交易类型(此处要转为ACSII码) + 终端机编号 + 交易日期 + 交易时间 + 800000000000(补足长度)
- SDES_MAC(0000000000000000+MONEY+31+130000000001+20090106+120000+800000000000,SESLK,MAC2)
- //个人账户划入金额(SSS CREDIT FOR LOAD)
- B02A00000B+20090106+120000+MAC2 //DTK
- 00C0000004(TAC+9000) //TAC:交易验证码
- B026000104(BALANCE+9000)//查询个人账户余额GET BALANCE
- SDES_MAC(0000000000000000+BALANCE+CN+MONEY+31+130000000001+20090106+120000+8000000000000000,DTK,_TAC)//终端产生
注:其中TAC必须等于_TAC;
文/闫鑫原创 转载请注明出处http://blog.csdn.net/yxstars/article/details/38389345
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。