前言
银行金卡,维萨和万事达、银联品牌,如果是贷记卡或准贷记卡,一定为16位卡号。而借记卡可以16-19位不等。
美国运通卡则不论金卡或是白金卡、普通卡,都是15位卡号。
16-19 位卡号校验位采用 Luhm 校验方法计算
银行卡的校验方式
Luhm校验
- 将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2
- 将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
- 将加法和加上校验位能被 10 整除。
1 <?php 2 /* 3 16-19 位卡号校验位采用 Luhm 校验方法计算: 4 1,将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2 5 2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字 6 3,将加法和加上校验位能被 10 整除。 7 */ 8 function luhm($s) { 9 $n = 0; 10 for ($i = strlen($s); $i >= 1; $i--) { 11 $index=$i-1; 12 //偶数位 13 if ($i % 2==0) { 14 $n += $s{$index}; 15 } else {//奇数位 16 $t = $s{$index} * 2; 17 if ($t > 9) { 18 $t = (int)($t/10)+ $t%10; 19 } 20 $n += $t; 21 } 22 } 23 return ($n % 10) == 0; 24 } 25 26 $r = luhm('6225881414207430'); 27 var_dump($r); 28 ?>