请问如何把这些写成程序计算出结果的步骤
卡校验值的计算卡校验值即CVV的计算方法如下:
1.将以下从第二磁道中抽取出的字符从左至右排列,产生26个字符:
主账号(PAN)
19位
卡有效期(EXPIRE
DATE)
4位
服务代码(SERVICE
CODE)
3位
并转换为104
Bits(26×4),转换方法为将每一位数字转换为4位的BCD码,即:
十六进制数字
BCD码
0
0000
1
0001
2
0010
…
…
E
1110
F
1111
2.将步骤1得出的结果的最后补上二进制“0”,使之成为128
Bits的字段,将该字段分为2个64
Bits的数据,其中前64
Bits数据为数据块1,后64
Bits数据为数据块2。
3.用CVKA对数据块1加密(ENCRYPTION)。
4.将步骤3得出的结果与数据块2异或(XOR),并用CVKA对结果加密。
5.用CVKB对步骤4得出的结果解密(DECRYPTION)。
6.用CVKA对步骤5得出的结果加密。
7.对步骤6得出的结果从左到右抽取出所有的数字(0~9)。
8.对步骤6得出的结果从左到右抽取出所有的十六进制字符(A~F),并对每一个十六进制字符减十进制10,使之变为数字,例如十六进制B(十进制为11)变为1。
9.将步骤7和8得出的数字从左至右排列,步骤8得出的数字放在步骤7得出的数字之后。
10.步骤9得出结果的前三位数字即为卡的校验值(CVV)。
(三)测试数据
以下数据可用于编写CVV算法时检查程序是否正确,其中:
CVKA=0123
4567
89AB
CDEF
CVKB=FEDC
BA98
7654
3210
13位PAN
服务代码
CVV
4123
456
789
012
8701
101
370
4999
988
887
777
9105
111
649
4666
655
554
444
9206
120
821
4333
322
221
111
9307
141
697
16位PAN
服务代码
CVV
4123456789012345
8701
101
561
4999988887777000
9105
111
245
4666655554444111
9206
120
664
4333322221111222
9307
141
382
以第一个十六位主账号为例,计算卡校验值的步骤如下:
主账号:4123
4567
8901
2345
:8701
服务代码:101
步骤1:抽取数据
4123456789012345
8701
101
步骤2:数据块
块1=4123
4567
8901
2345
块2=8701
1010
0000
0000
步骤3:用CVKA加密
块1=4123
4567
8901
2345
CVKA=0123
4567
89ab
cdef
结果3=b76a
ddce
71cc
c6be
步骤4:用块2异或步骤3的结果,并用
结果3=b76a
ddce
71cc
c6be
CVKA对异或结果加密
块2=8701
1010
0000
0000
结果=306b
cdde
71cc
c6be
CVKA=0123
4567
89ab
cdef
结果4=a510
46a2
59a4
c467
步骤5:用CVKB对步骤4的结果解密
结果4=a510
46a2
59a4
c467
CVKB=fedc
ba98
7654
3210
结果5=90f6
db02
a6f7
e621
步骤6:用CVKA对步骤5的结果加密
结果5=90f6
db02
a6f7
e621
CVKA=0123
4567
89ab
cdef
结果6=5b61
4982
e03c
97dd
步骤7:对步骤6的结果抽取数字
结果7=5614
9820
397
步骤8:对步骤6的结果抽取十六进制字
抽取结果=becd
d
符,并转换为10进制数字(每位减
结果8=14233
10)
步骤9:将步骤8的结果排列在步骤7的
结果9=5614
9820
3971
4233
数字后面
步骤10:步骤9的结果前三位数字为CVV
结果10=561