PHP中使用Luhn算法校驗信用卡及借記卡卡號


Luhn算法會通過校驗碼對一串數字進行驗證,校驗碼通常會被加到這串數字的末尾處,從而得到一個完整的身份識別碼。

我們以數字“7992739871”為例,計算其校驗位:

  • 從校驗位開始,從右往左,偶數位乘2(例如,7*2=14),然后將兩位數字的個位與十位相加(例如,10:1+0=1,14:1+4=5);
  • 把得到的數字加在一起(本例中得到67);
  • 將數字的和取模10(本例中得到7),再用10去減(本例中得到3),得到校驗位。

另一種方法是:

  • 從校驗位開始,從右往左,偶數位乘2,然后將兩位數字的個位與十位相加;
  • 計算所有數字的和(67);
  • 乘以9(603);
  • 取其個位數字(3),得到校驗位。

使用PHP實現該算法(第一種):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
  * PHP實現Luhn算法(方式一)
  * @author:http://nonfu.me
  */
$no = '7432810010473523' ;
$arr_no = str_split ( $no );
$last_n = $arr_no [ count ( $arr_no )-1];
krsort( $arr_no );
$i = 1;
$total = 0;
foreach ( $arr_no as $n ){
     if ( $i %2==0){
         $ix = $n *2;
         if ( $ix >=10){
             $nx = 1 + ( $ix % 10);
             $total += $nx ;
         } else {
             $total += $ix ;
         }
     } else {
         $total += $n ;
     }
     $i ++;
}
$total -= $last_n ;
$x = 10 - ( $total % 10);
if ( $x == $last_n ){
     echo '符合Luhn算法' ;
}

  

另一種算法的PHP實現:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
  * PHP實現Luhn算法(方式二)
  * @author:http://nonfu.me
  */
$no = '6228480402564890018' ;
$arr_no = str_split ( $no );
$last_n = $arr_no [ count ( $arr_no )-1];
krsort( $arr_no );
$i = 1;
$total = 0;
foreach ( $arr_no as $n ){
     if ( $i %2==0){
         $ix = $n *2;
         if ( $ix >=10){
             $nx = 1 + ( $ix % 10);
             $total += $nx ;
         } else {
             $total += $ix ;
         }
     } else {
         $total += $n ;
     }
     $i ++;
}
$total -= $last_n ;
$total *= 9;
if ( $last_n == ( $total %10)){
     echo '符合Luhn算法' ;
}

  

經檢測,能夠校驗16位或19位銀行卡卡號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM