• ED/EP系列5《消费指令》


    1. 消费交易


        消费交易同意持卡人使用电子存折或电子钱包的剩余金额进行购物或获取服务.

    特点:
    1) --能够在销售点终端(POS)上脱机进行
    2) --使用电子存折进行的消费交易必须提交个人识别码(PIN),使用电子钱包则不须要


    步骤:
    1) --參考复合应用消费交易



    CPURESET()
    JE=00000001//消费金额
    DPK= 00000000000000000000000000000055		
    
    
    00A40000021001
    805C000204(消费前金额+9000)
    
    
    //(见JR/T 0025.2的5.2.9条)
    805001020B+01+JE+000000000001+0F(XYSJ2+9000)
    
    
    YE=COPY(XYSJ2,1,8)      //ED或EP剩余金额	        4
    TJJYXH=COPY(XYSJ2,9,4) //脱机交易序号	        2
                           //透支限额	            3
                           //密钥算法版本(DPK)	1
                           //算法标识(DPK)	    1
    WSJS=LAST(XYSJ2,8)     //伪随机数(IC卡)	    4
    
    
    
    
    ECB_3DES_EN(WSJS+TJJYXH+0011,DPK,SESLK)
    //交易金额 + 交易类型标识 + 终端机编号 + 交易日期(终端)+ 交易时间(终端)
    3DES_MAC(0000000000000000+JE+06+000000000001+20090225+153030+800000000000,SESLK,MAC1)
    
    
    //DEBIT FOR PURCHASE/CASH WITHDRAW(见JR/T 0025.2的5.2.3条)
    //终端交易序号 + 交易日期(终端)+ 交易时间(终端)+ MAC1
    805401000F+00000011+20090225+153030+MAC1+08
    //TAC	4
    //MAC2	4
    
    
    805C000204(消费后金额+9000)
    




    2. 复合应用消费交易


        复合应用消费交易同意持卡人使用电子钱包的剩余金额进行购物或获取服务。此交易能够在终端设备或其他读卡设备上脱机进行。此交易无需提交个人识别码(PIN)--(电子钱包专用).

    特点:
    --能够在终端设备或其他读卡设备上脱机进行;
            --无需提交个人识别码(PIN)


    步骤:
         --终端:发出INITIALIZE FOR CAPP PURCHASE命令启动复合应用消费交易
         --IC卡:检查提供的密钥索引號(NO:9403);检查钱包是否被灰锁(NO:9408);检查电子钱包剩余金额是否大于或等于交易金额(NO:9401);产生一个伪随机数(ICC)和过程密钥
       --SESPK:伪随机数(ICC)||电子钱包交易序号||终端交易序号的最右两个字节
       --终端:产生MAC1,供IC卡来验证PSAM的合法性
       --终端发出UPDATE CAPP DATA CACHE命令
    --IC卡:检查是否存在与SFI值同样的文件(NO:6A82);查询标识符的记录(NO:6A83);检查应用锁定标志字节(NO:9407);检查数据域长度是否大于对应记录的长度(NO:6A84)
       --终端:发出DEBIT FOR CAPP PURCHASE命令
       --IC卡:验证MAC1的有效性(NO:9302)
    --IC卡:交易处理,扣减消费金额,交易序号加1,更新消费交易记录,产生报文签别码(MAC2)
       --终端:验证MAC2 


        注:持卡人如需使用非接触式金融IC卡在特定应用环境中进行交易,需先在卡片中添加对应复合应用类型,即启用此类型的复合应用。——交易类型标识‘09’


    CPURESET()
    00A40000021001
    
    
    //DPK 消费密钥
    DPK=00000000000000000000000000000055
    JE=00000001
    
    
    //INTIALIZE FOR CAPP PURCHASE(见JR/T 0025.9的5.2.12条)
    805003020B+01+JE+000000000001+0F(DATA+9000)
    
    
    YE=COPY(DATA,1,8) //电子钱包剩余金额	          4
    XH=COPY(DATA,9,4) //电子钱包交易序号	        2
                         //透支限额	               3
                         //密钥算法版本(DPK)	   1
                         //密钥标识(DPK)	        1
    WS=LAST(DATA,8)   //伪随机数(IC卡)	        4
    ZDJYXH=00000001
    
    
    //计算过程密钥SESLK   
    ECB_3DES_EN(WS+XH+0001,DPK,SESLK)
            
    //计算MAC1,数据为:交易金额 + 交易类型(社保要转为ACSII码) + 终端机编号 + 交易日期 + 交易时间 + 80(补足长度)
    3DES_MAC(0000000000000000+JE+09+000000000001+20110106+120000+800000000000,SESLK,MAC1)
    
    
    //UPDATE CAPP DATA CACHE
    80DC01C8+20+011E00030B200905260000000000000000000000000000000000000000000000
    //DEBIT FOR CAPP PURCHASE
    805401000F+ZDJYXH+20110106+120000+MAC1+08




    3. 改动透支限额交易


    透支功能是一种基于电子存折应用的有限信用功能。假设透支限额存在,电子存折的剩余金额是实际圈存剩余金额与透支限额之和。

    特点:
    1) --必须在金融终端上联机进行;
    2) --必须提交个人识别码(PIN)

        
    步骤:
    1) --终端:发出初始化改动透支现额(INITIALIZE FOR UPDATE)命令启动改动透支限额交易
    2) --IC卡:检查是否支持提供的密钥索引號(NO:9403),产生一个伪随机数(ICC)、一个过程密钥SESUK和一个报文鉴别码(MAC1)
    3) --终端: 验证MAC1。
    4) --终端: 用SESUK加密数据产生MAC2,并发出改动透支现额(UPDATE OVERDRAWLIMIT)命令
    5) --IC卡:验证MAC2的有效性
    6) --IC卡:交易处理

        --------------------见JR/T 0025.2的5.5.6条(未)




    CPURESET()
    JE=00000001//消费金额
    DUK=7DAE5E53140A9170C21D5805EADB7E9A		
    
    
    00A40000021001
    0020000003+888888 //校验password
    
    
    //(见JR/T 0025.2的5.2.9条) 密钥索引號+终端机编号
    8050040107+01+000000000001(XYSJ2+9000)
    
    
    YE=COPY(XYSJ2,1,8)       //ED剩余金额	               4
    TJJYXH=COPY(XYSJ2,9,4)  //ED联机交易序号	        2
    YZXE=COPY(XYSJ2,13,6)   //原透支限额	             3
                                //密钥版本(DUK)	    1
                                //算法标识(DUK)	      1
    WSJS=COPY(XYSJ2,23,8)   //伪随机数(IC卡)	    4
    MAC1=LAST(XYSJ2,8)      //MAC1                	4
    
    
    
    
    //SESUK:伪随机数(ICC)||电子存折联机交易序号||‘8000’
    ECB_3DES_EN(WSJS+TJJYXH+8000,DUK,SESLK)
    
    
    //电子存折剩余金额 + 透支限额 + 交易类型标识 + 终端机编号
    3DES_MAC(0000000000000000+YE+YZXE+07+000000000001+8000,SESLK,_MAC1)
    //透支限额 + 交易类型标识 + 终端机编号 + 交易日期 + 交易时间
    3DES_MAC(0000000000000000+YE+YZXE+07+000000000001+20090225+153030+800000,SESLK,MAC2)
    //新透支限额+交易日期(发卡方)+ 交易时间(发卡方)+ MAC2
    805800000E+20090225+153030+MAC2(TAC+9000)
    

    文/闫鑫原创   转载请注明出处http://blog.csdn.net/yxstars/article/details/38225043


  • 相关阅读:
    多线程——Thread与Runnable的区别(28)
    多线程——Runnable接口实现多线程(27)
    多线程——调用start()方法与直接调用run()方法的区别
    动态规划---优化编辑器问题(计算字符串距离)
    网易2017春招笔试真题编程题集合(4)——消除重复元素
    网易2017春招笔试真题编程题集合(3)——调整队形
    网易2017春招笔试真题编程题集合(2)——赶去公司
    网易2017春招笔试真题编程题集合(1)——双核处理
    Delphi2010安装win10不能编译问题
    数据类型转换byteushotint64(long)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4078322.html
Copyright © 2020-2023  润新知