clear
reset
auto_response on
prompt on
package_aid = 1111111111111111 // 按厂商的applet修改
applet_aid = 2222222222222222
value_50 = "PBOC Credit" // 之后的数据,按需求修改
value_9f12 = "CARD IMAGE 0001"
value_5f20 = "FULL FUNCTIONAL"
pboc_aid = A0000003330101
pse_aid = "1PAY.SYS.DDF01"
ppse_aid = "2PAY.SYS.DDF01"
pboc_aid_1 = $pboc_aid 01
pboc_aid_2 = $pboc_aid 02
call 重安装
? "个人化 "
timer_begin
00 a4 04 00 ( $pboc_aid )
if sw != 9000
pause
endif
jcop22_ext_auth 0, 404142434445464748494a4b4c4d4e4f
if sw != 9000
pause
endif
set resp
SDEK_密文 = hmid( $resp, 20, 10 )
? "DGI 0101 = {57 + 9F1F}: 持卡人基本信息数据 pernalization data"
? "| 57 | 磁条2 等效数据 | 最大 19 | 强制 |"
? "| 9F1F | 磁条1 自定义数据 | Var | 可选 |"
index = 00
tag_57 = 57 ( 6228000100001117D30122010123456789 )
tag_9F1F = 9F1F ( 30313032303330343035303630373038303930413042 )
80 e2 00 $index ( 0101 ( 70 ( $tag_57 $tag_9f1f ) ))
if sw != 9000
pause
endif
? "DGI 0102 = {57 + 9F1F}: 持卡人基本信息数据 pernalization data"
? "| 5F20 | 持卡人姓名 | 2-26 | 强制 |"
? "| 9F61 | 持卡人证件号 | 1-40 | 强制 |"
? "| 9F62 | 持卡人证件类型 | 1 | 强制 |"
index = add( $index, 01 )
tag_5F20 = 5F20 ( $value_5f20 )
tag_9F61 = ""
tag_9F62 = ""
80 e2 00 $index ( 0102 ( 70 ( $tag_5f20 $tag_9f61 $tag_9f62 ) ))
if sw != 9000
pause
endif
? "DGI 0201 参与静态签名数据认证的数据(标准借贷记)"
? "| 5A | 应用主帐户 (PAN) | Var(最大10)|"
? "| 5F24 | 应用有效期 | 3 |"
? "| 5F25 | 应用生效日期 | 3 |"
? "| 9F08 | 应用版本号 | 2 |"
index = add( $index, 01 )
tag_5A = 5A ( 6228000100001117 )
tag_5F24 = 5F24 ( 301231 )
tag_5F25 = 5F25 ( 950701 )
tag_9F08 = 9F08 ( 0030 )
80 e2 00 $index ( 0201 ( 70 ( $tag_5a $tag_5f24 $tag_5f25 $tag_9f08 ) ) )
if sw != 9000
pause
endif
? "DGI 0202:IC卡公钥证书(标准借贷记)"
? "| 9F46 | IC卡公钥证书 | Var |"
index = add( $index, 01 )
tag_9F46 = 9F46 81( 875F85F08A89F4B500FA8C1A55407D88322710E3B885390D945422A73A0AB876F4C4FBC9C49C3083F38C9EFE6C7B21F6541050BF11642A28329C65D8831C80CC0D753D412112800FF2FA12ECC83B318A26EE44E313BD5D1C45C806787387DB91D259D75D350F9CD18B34C635A94EF343A2E88F8A4162D83BC900EA2CF5592820 )
80 e2 00 $index ( 0202 ( 70 81( $tag_9f46 ) ) )
if sw != 90 00
pause
endif
? "DGI 0203:IC卡公钥证书(标准借贷记)"
? "| 9F47 | IC卡公钥指数 | 1或3 |"
? "| 9F48 | IC卡公钥余项 | Var |"
? "| 9F07 | 应用用途控制 | 2 |"
? "| 8E | 持卡人验证方法(CVM)列表 | Var |"
? "| 9F0D | 发卡行行为代码(IAC)-缺省 | 5 |"
? "| 9F0E | 发卡行行为代码(IAC)-拒绝 | 5 |"
? "| 9F0F | 发卡行行为代码(IAC)-联机 | 5 |"
? "| 5F28 | 发卡行国家代码 | 2 |"
index = add( $index, 01 )
tag_9F47 = 9F47 ( 010001 )
tag_9F48 = 9F48 ( 518B0EA3ABA9343F1778545FFB49EE840BBCEA457DBAABBFD755BA0F943A08A59CFFB6066B4084767599 )
tag_9F07 = 9F07 ( FFC0 )
tag_8E = 8E ( 0000000000000000410342035E0343031F00 )
tag_9F0D = 9F0D ( F020040000 )
tag_9F0E = 9F0E ( 0050880000 )
tag_9F0F = 9F0F ( F020049800 )
tag_5F28 = 5F28 ( 0156 )
80 e2 00 $index ( 0203 ( 70 ( $tag_9f47 $tag_9f48 $tag_9f07 $tag_8e $tag_9f0d $tag_9f0e $tag_9f0f $tag_5f28 ) ) )
if sw != 90 00
pause
endif
? "DGI 0204:签名静态应用数据(标准借贷记) "
? "| 93 | 签名静态应用数据 | Var |"
? "| 9F4A | 静态数据认证标签列表 | Var |"
? "| 9F63 | 卡产品标识信息 | 16 |"
index = add( $index, 01 )
tag_93 = 93 81( 817B58E992D032B7F0C0B5E0AA146F53FDD20DE1B3BFD9BFD28D0D7B5D4B69A62E1442847EC0FCED37C41A653AC8AEFF680704607E7D6EDBB683FDF8AE3CBA63FD2FB93845D9DA06F5B6CC09E807A0B69D5CF6FAFFDEC65A3E00C560947E4822FD74D0A4994493C9D5E92F83634C1EE77BC805F838A9A79E114787B65F6B74B9 )
tag_9F4A = ""
tag_9F63 = ""
80 e2 00 $index ( 0204 ( 70 81( $tag_93 $tag_9f4a $tag_9f63 ) ) )
if sw != 9000
pause
endif
? "DGI 0301:发卡行公钥证书"
? "| 90 | 发卡行公钥(IPK)证书 | Var |"
index = add( $index, 01 )
tag_90 = 90 81( 229103A5E3120F2D2862091176AA2BD4E24D69E7EEF7B9195C91EA0088AECFF47EDFA0BEEF7C391DF3B05F717DCC06FFC8EEFF90BA14212B8A52AD48B33277B2E230D40B3E76DC59778926F1D8739E106CD741DE06A7423DFBA25E02F12E543D13D1B471806526024981B7D26B4BF6E5558604CCC289F59E8A802F45FB3D9E67 )
80 e2 00 $index ( 0301 ( 70 81( $tag_90 ) ) )
if sw != 90 00
pause
endif
? "DGI 0302:发卡行公钥证书"
? "| 9F49 | 动态数据认证对象列表DDOL | Var |"
? "| 9F32 | 发卡行公钥指数 | 1或3 |"
? "| 92 | 发卡行公钥余项 | Var |"
? "| 8F | 认证中心公钥索引 | 1 |"
index = add( $index, 01 )
tag_9F49 = ""
tag_9F32 = 9F32 ( 03 )
tag_92 = 92 ( 8B643D1EAF2EA784AC205303C90E745EA2EFA5CBF02CC47D47833BB7B27ECC6962385A4B )
tag_8F = 8F ( 80 )
80 e2 00 $index ( 0302 ( 70 ( $tag_9f49 $tag_9f32 $tag_92 $tag_8f ) ) )
if sw != 90 00
pause
endif
? "DGI 0303:卡片管理数据"
? "| 5F30 | 服务码 | 2 |"
? "| 8C | 卡片风险管理数据对象列表1(CDOL1) | Var |"
? "| 8D | 卡片风险管理数据对象列表2(CDOL2) | Var |"
? "| 9F42 | 应用货币代码 | 2 |"
? "| 5F34 | 应用主帐户序列号 | 1 |"
index = add( $index, 01 )
tag_5F30 = 5F30 ( 0201 )
tag_8C = 8C ( 9F02069F03069F1A0295055F2A029A039F21039C019F3704 )
tag_8D = 8D ( 8A029F02069F03069F1A0295055F2A029A039F21039C019F3704 )
tag_9F42 = 9F42 ( 0156 )
tag_5F34 = 5F34 ( 01 )
80 e2 00 $index ( 0303 ( 70 ( $tag_5f30 $tag_8c $tag_8d $tag_5f34 ) ) )
if sw != 90 00
pause
endif
? "DGI 0401:终端风险管理"
? "| 9F14 | 连续脱机交易下限 | 1 |"
? "| 9F23 | 连续脱机交易上限 | 1 |"
index = add( $index, 01 )
tag_9F14 = 9F14 ( 03 )
tag_9F23 = 9F23 ( 07 )
80 e2 00 $index ( 0401 ( 70 ( $tag_9f14 $tag_9f23 ) ) )
if sw != 90 00
pause
endif
? "DGI 8000 = 应用密文密钥(0x10字节) + 报文鉴别码密钥(0x10字节) + 数据加密密钥(0x10字节) : 对称密钥"
? "或叫"
? "DGI 8000 = 写应用密文密钥(0x10字节) + 写安全报文认证(MAC)密钥(0x10字节) + 写安全报文加密密钥(0x10字节) : 对称密钥"
// **** 密钥值要是密文 ****
index = add( $index, 01 )
应用密文密钥 = 11223344006677881122334455007788
报文鉴别码密钥 = 8B4F854F0831FBF2635A212E4DDDB92A
数据加密密钥 = 11220044556677881122330055667788
应用密文密钥_密文 = 3des_encode_ecb( $应用密文密钥 , $SDEK_密文 )
报文鉴别码密钥_密文 = 3des_encode_ecb( $报文鉴别码密钥 , $SDEK_密文 )
数据加密密钥_密文 = 3des_encode_ecb( $数据加密密钥 , $SDEK_密文 )
80 e2 60 $index ( 8000 ( $应用密文密钥_密文 $报文鉴别码密钥_密文 $数据加密密钥_密文 ) )
if sw != 9000
pause
endif
? "DGI 8010 脱机PIN"
// PIN值是密文
index = add( $index, 01 )
脱机PIN = 24 1234 FFFFFFFFff
脱机PIN_密文 = 3des_encode_ecb( $脱机PIN, $SDEK_密文 )
80 e2 60 $index ( 8010 ( $脱机PIN_密文 ) )
if sw != 9000
pause
endif
? "DGI 9010 pin相关数据"
// PIN值是密文
index = add( $index, 01 )
PIN尝试计数器 = 03
PIN限制计数器 = 03
PIN相关数据 = $PIN尝试计数器 $PIN限制计数器
80 e2 00 $index ( 9010 ( $PIN相关数据 ) )
if sw != 9000
pause
endif
p = D0BAD286ED4E1CBE6CED5391A9696ED58F317E4A52D0E37C755C01225F676AB712A15D1B953BD67FB8DFB610655965352583B46B260E481661DF74FE85C20AC1
q = C1960C87E0333FCBB1C2BBEB787019D6080B33C8F5039C2BD55CC1D247398AA5DBD47FA4E1FF85F425D214B4B32A341E72C1F9FF6765D1155963BEC02E8958D9
dp = 3D25ADCD0731EDEBBF3F5B4EFDC13C4DE5D00AFE3CFAA2D9F00B8EED81E36AF8CCC566E050BCA1DEF2CADEAC38F492589A6FD5E7D9D32F3D1758FE0E1E233541
dq = 5A2479BF4799F5A9EF236387F9341203C5091A5B08245F33560DF43EEB6592F73A8F0FC5026B8EBFAA60D1BD76F43F02B2A33ABB40357C0FB9E92568AE02CCB9
qinv = 0EB41A42801F08D5C16EE593800E16C42894639D1D16FCD366FE4D80A4154B15FB25AC5C24D7607848B55F022230FE4FAD4913AD526CB928A762F183625D775B
p1 = fixed80( $p )
q1 = fixed80( $q )
dp1 = fixed80( $dp )
dq1 = fixed80( $dq )
qinv1 = fixed80( $qinv )
// **** 密钥值要是密文 ****
? "导入RSA CRT 密钥对, P = 8205, Q = 8204, dP = 8203, dQ = 8202, qInv(U) = 8201"
index = add( $index, 01 )
p2 = 3des_encode_ecb( $p1, $SDEK_密文 )
80 e2 60 $index ( 8205 ( $p2 ) )
if sw != 9000
pause
endif
index = add( $index, 01 )
q2 = 3des_encode_ecb( $q1, $SDEK_密文 )
80 e2 60 $index ( 8204 ( $q2 ) )
if sw != 9000
pause
endif
index = add( $index, 01 )
dp2 = 3des_encode_ecb( $dp1, $SDEK_密文 )
80 e2 60 $index ( 8203 ( $dp2 ) )
if sw != 9000
pause
endif
index = add( $index, 01 )
dq2 = 3des_encode_ecb( $dq1, $SDEK_密文 )
80 e2 60 $index ( 8202 ( $dq2 ) )
if sw != 9000
pause
endif
index = add( $index, 01 )
qinv2 = 3des_encode_ecb( $qinv1, $SDEK_密文 )
80 e2 60 $index ( 8201 ( $qinv2 ) )
if sw != 9000
pause
endif
? "DGI 9000 密码校验值"
? "| - | 应用密文DEA 密钥校验值 | 3 | 否 |"
? "| - | 报文鉴别码DEA 密钥校验值 | 3 | 否 |"
? "| - | 数据加密DEA 密钥校验值 | 3 | 否 |"
// DGI 8000的三个密钥密文分别对8字节00加密,各取前3字节,组成9字节
index = add( $index, 01 )
aa = 3des_encode_ecb( 0000000000000000, $应用密文密钥 )
bb = 3des_encode_ecb( 0000000000000000, $报文鉴别码密钥 )
cc = 3des_encode_ecb( 0000000000000000, $数据加密密钥 )
aa = mid( $aa, 0, 3 )
bb = mid( $bb, 0, 3 )
cc = mid( $cc, 0, 3 )
80 e2 00 $index ( 9000 ( $aa $bb $cc ) )
if sw != 9000
pause
endif
? "DGI 9102:选择应用响应数据(接触)"
? "| A5 | FCI | | 专用模板 | 变长 | 强制 |"
? "| | 50 | | 应用标签 | 1 – 16 | 强制 |"
? "| | 87 | | 应用优先指示符 | 1 | 推荐 |"
? "| | 9F38 | | PDOL | 变长 | 推荐 |"
? "| | 5F2D | | 语言优选项 | 2 – 8 | 可选 |"
? "| | 9F11 | | 发卡行代码表索引 | 1 | 推荐 |"
? "| | 9F12 | | 应用优先名称 | 1 -- 16 | 可选 |"
? "| | BF0C | | FCI发卡行任意数据 | 可变 | 可选 |"
? "| | | 9F4D | 日志入口 | 2 | 可选 |"
index = add( $index, 01 )
tag_50 = 50 ( $value_50 )
tag_87 = 87 ( 01 )
tag_9F38 = 9F38 ( 9F33039F4E14 )
tag_5F2D = 5F2D ( 7A68656E66726465 )
tag_9F11 = 9F11 ( 01 )
tag_9F12 = 9F12 ( $value_9f12 )
tag_9F4D = 9F4D ( 0B0A )
tag_BF0C = BF0C ( $tag_9f4d )
tag_A5 = A5 ( $tag_50 $tag_87 $tag_9f38 $tag_5f2d $tag_9f11 $tag_9f12 $tag_bf0c )
connect_fci = $tag_a5
80 e2 00 $index ( 9102 ( $connect_fci ) )
if sw != 9000
pause
endif
? "DGI 9103:选择应用响应数据(非接触)"
? "| A5 | FCI | | 专用模板 | 变长 | 强制 |"
? "| | 50 | | 应用标签 | 1 – 16 | 强制 |"
? "| | 87 | | 应用优先指示符 | 1 | 推荐 |"
? "| | 9F38 | | PDOL | 变长 | 推荐 |"
? "| | 5F2D | | 语言优选项 | 2 – 8 | 可选 |"
? "| | 9F11 | | 发卡行代码表索引 | 1 | 推荐 |"
? "| | 9F12 | | 应用优先名称 | 1 -- 16 | 可选 |"
? "| | BF0C | | FCI发卡行任意数据 | 可变 | 可选 |"
? "| | | 9F4D | 日志入口 | 2 | 可选 |"
index = add( $index, 01 )
tag_50 = 50 ( $value_50 )
tag_87 = 87 ( 01 )
tag_9F38 = 9F38 ( 9F66049F02069F03069F1A0295055F2A029A039C019F37049F33039F4E149F7A01 )
tag_5F2D = 5F2D ( 7A68656E66726465 )
tag_9F11 = 9F11 ( 01 )
tag_9F12 = 9F12 ( $value_9f12 )
tag_9F4D = 9F4D ( 0B0A )
tag_BF0C = BF0C ( $tag_9f4d )
tag_A5 = A5 ( $tag_50 $tag_87 $tag_9f38 $tag_5f2d $tag_9f11 $tag_9f12 $tag_bf0c )
connect_less_fci = $tag_a5
80 e2 00 $index ( 9103 ( $connect_less_fci ) )
if sw != 9000
pause
endif
? "DGI 9104:GPO响应数据(标准借贷记)"
index = add( $index, 01 )
? "| 82 | AIP | 2 | 否 |"
? "| 94 | AFL | 可变 | 否 |"
tag_82 = 82 ( 5C00 )
tag_94 = 94 ( 08010200 10010401 18010300 20010100 )
80 e2 00 $index ( 9104 ( $tag_82 $tag_94 ) )
if sw != 90 00
pause
endif
? "DGI 9200:GAC响应数据"
? "| 9F10 | 发卡行应用数据 | 可变 |"
index = add( $index, 01 )
tag_9F10 = 9F10 ( 0701010300000001 )
80 e2 00 $index ( 9200 ( $tag_9f10 ) )
if sw != 9000
pause
endif
? "DGI 0D01:卡片内部风险管理数据"
? "| 9F58 | 连续脱机交易下限(终端频度检查) | 1 |"
? "| 9F59 | 连续脱机交易上限(终端频度检查) | 1 |"
? "| 9F53 | 连续脱机交易限制,国际(货币) | 1 |"
? "| 9F72 | 连续脱机交易限制,国际(国家) | 1 |"
? "| 9F54 | 累计脱机交易金额限制 | 6 |"
? "| 9F75 | 累计脱机交易金额限制(双重货币) | 6 |"
? "| 9F73 | 货币兑换因子 | 4 |"
? "| 9F5C | 累计脱机交易金额上限 | 6 |"
? "| 9F4F | 日志格式 | 可变 |"
? "| 9F77 | 电子现金余额上限 | 6 |"
? "| 9F78 | 电子现金单笔交易限额 | 6 |"
? "| 9F79 | 电子现金余额 | 6 |"
? "| 9F6D | 电子现金重置阈值 | 6 |"
? "| 9F6B | 卡片持卡人验证方法限制 | 6 |"
? "| 9F68 | 卡片附加处理 | 4 |"
? "| 9F6C | 卡片交易属性 | 2 |"
? "| 9F5D | 可用脱机消费金额 | 6 |"
? "| 9F67 | MSD偏移 | 1 |"
index = add( $index, 01 )
tag_9F58 = 9F58 ( 03 )
tag_9F59 = 9F59 ( 07 )
tag_9F53 = 9F53 ( 05 )
tag_9F72 = 9F72 ( 00 )
tag_9F54 = 9F54 ( 000000010000 )
tag_9F75 = ""
tag_9F73 = ""
tag_9F5C = ""
tag_9F4F = 9F4F ( 9A039F21039F02069F03069F1A025F2A029F4E149C019F3602 )
tag_9F77 = 9F77 ( 000000010000 )
tag_9F78 = 9F78 ( 000000001000 )
tag_9F79 = 9F79 ( 000000002000 )
tag_9F6D = 9F6D ( 000000001500 )
tag_9F6B = 9F6B ( 000000000500 )
tag_9F68 = 9F68 ( 92601000 )
tag_9F6C = 9F6C ( 3000 )
tag_9F5D = 9F5D ( 000000010000 )
tag_9F67 = 9F67 ( 31 )
tag1 = $tag_9F58 $tag_9F59 $tag_9F53 $tag_9F72
tag2 = $tag_9F54 $tag_9F75 $tag_9F73 $tag_9F5C
tag3 = $tag_9F4F $tag_9F77 $tag_9F78 $tag_9F79
tag4 = $tag_9F6D $tag_9F6B $tag_9F68 $tag_9F6C $tag_9F5D $tag_9F67
tags = $tag1 $tag2 $tag3 $tag4
80 e2 00 $index ( 0d01 ( $tags ) )
if sw != 90 00
pause
endif
? "DGI 0E01:卡片内部风险管理数据"
? "| 9F51 | 应用货币代码 | 2 | |"
? "| 9F52 | 应用默认行为(ADA) | 2 | |"
? "| 9F56 | 发卡行认证指示位 | 1 | |"
? "| 9F55 | 地域指示器 | 1 | |"
? "| 9F57 | 发卡行国家代码 | 2 | |"
? "| 9F76 | 第二应用货币代码 | 2 | |"
? "| 57 | 磁条2 等效数据 最大 | 19 | 条件.在qPBOC GPO 响应中出现 |"
? "| 5F20 | 持卡人姓名 | 2-26 | 条件.在qPBOC GPO 响应中出现 |"
? "| 9F36 | ATC | 2 | 可选,如果不写入此数据新卡时默认为0 |"
? "| 5F34 | 应用主帐户序列号 | 1 | 强制,在qPBOC GPO响应中出现 |"
index = add( $index, 01 )
tag_9F51 = 9F51 ( 0156 )
tag_9F52 = 9F52 ( 8240 )
tag_9F56 = 9F56 ( 80 )
tag_9F55 = 9F55 ( C0 )
tag_9F57 = 9F57 ( 0156 )
tag_9F76 = 9F76 ( 0000 )
tag_57 = 57 ( 6228000100001117D30122010123456789 )
tag_5F20 = 5F20 ( 46554C4C2046554E4354494F4E414C )
tag_9F36 = 9F36 ( 0000 )
tag_5F34 = 5F34 ( 01 )
80 e2 80 $index ( 0e01 ( $tag_9F51 $tag_9F52 $tag_9F56 $tag_9F55 $tag_9F57 $tag_9F76 $tag_57 $tag_5F20 $tag_9F36 $tag_5F34 ) )
if sw != 90 00
pause
endif
00 a4 04 00 ( $pse_aid )
if sw != 90 00
pause
endif
index = 00
80 e2 00 $index ( 0101 ( 70 ( 61 ( 4F( $pboc_aid ) 50( $value_50 ) 9f12 ( $value_9f12 ) 87 ( 01 ) ) ) ) )
if sw != 90 00
pause
endif
index = add( $index, 01 )
80 e2 80 $index ( 9102 ( A5 ( 88 01 01 ) ) )
if sw != 90 00
pause
endif
00 a4 04 00 ( $ppse_aid )
if sw != 90 00
pause
endif
index = 00
80 e2 00 $index ( 9102 ( A5 ( 88 ( 01 ) ) ) )
if sw != 90 00
pause
endif
index = add( $index, 01 )
80 e2 80 $index ( 9103 ( A5 ( BF0C ( 61( 4f( $pboc_aid ) 50( $value_50 ) 87 ( 01 ) ) ) ) ) )
if sw != 90 00
pause
endif
timer_end
? "!!!! Persionalize end!!!!"
end
重安装:
cardmanager = a000000003000000
? "执行 借贷记DGI版 删除流程"
select cardmanager $cardmanager
jcop22_ext_auth 0, 404142434445464748494a4b4c4d4e4f
do 2
delete $pse_aid
delete $ppse_aid
delete $pboc_aid
delete $pboc_aid_1
delete $pboc_aid_2
delete A000000333010106
loop
install packageaid = $package_aid, appletaid = $applet_aid, instanceaid = $pse_aid
if sw != 9000
pause
endif
install packageaid = $package_aid, appletaid = $applet_aid, instanceaid = $ppse_aid
if sw != 9000
pause
endif
install packageaid = $package_aid, appletaid = $applet_aid, instanceaid = $pboc_aid
if sw != 9000
pause
endif
? "应用 instance 安装成功"
return