ホームページ  >  記事  >  バックエンド開発  >  PHP における銀行カード番号の一般的な検証アルゴリズムの概要

PHP における銀行カード番号の一般的な検証アルゴリズムの概要

藏色散人
藏色散人転載
2021-07-26 15:23:404290ブラウズ

最近、会社のニーズにより、銀行カード番号情報が必要な API を作成しました。この検証ルールに関しては、番号のプルなどの一般的な検証が多数見つかりました。そして後で、友人が銀行カードを生成するためのルールについて比較的詳細な紹介文を書いており、その短い要約を作成していることに気づきました。

LUHN アルゴリズム

チェック デジット アルゴリズム (Luhn Check)数字アルゴリズム) とも呼ばれます。モジュラス 10 式は、銀行カードおよびクレジット カード番号の有効性を検証するために使用される単純なアルゴリズムです。 American Express、Passport、MasterCard、Discover、Diners Club など、すべての主要なクレジット カード会社が発行したクレジット カードに対応しています。このアルゴリズムは、もともと 1960 年代に数学者のグループによって定式化されました。現在、ルーン テスト数値アルゴリズムは一般に公開されており、誰でも使用できます

#ルーン アルゴリズムの原理

中国招商銀行のカード番号を持っているとします

6225882708965808 (国内の主流の銀行カード番号は通常 16 桁または 19 桁です)

ステップ 1

最後の桁から開始

逆方向 奇数 桁の合計を計算

たとえば、上のカード番号を次の

8 + 8 + 6 + 8 + 7 + 8 + 5 + 2 = 52
# に計算します。

## ステップ 2最後の桁から開始

逆方向

最初の 偶数 桁に 2 を掛けます。積が 2 桁 の場合、9 を引きます。 合計するとき、積が 2 桁 でない場合は、直接加算します。 たとえば、カードを計算します。上の数値を次の値に置き換えます

0 * 2 = 0
5 * 2 = 10 - 9 = 1
9 * 2 = 18 - 9 = 9
0 * 2 = 0
2 * 2 = 4
8 * 2 = 16 - 9 = 7
2 * 2 = 4
6 * 2 = 12 - 9 = 3
最后计算结果
0 + 1 + 9 + 0 + 4 + 7 + 4 + 3 = 28

ステップ 3

奇数桁の合計と偶数桁の合計を加算し、結果が 10 で割り切れれば検証は合格です。

52 + 28 = 80
80 % 10 = 0

PHP バージョンの luhn アルゴリズム
    function checkLuhn($card){
        $len=strlen($card);
        $all=[];
        $sum_odd=0;
        $sum_even=0;
        for($i=0;$i<$len;$i++){
            $all[]=substr($card,$len-$i-1,1);
        }
        //all 里的偶数key都是我们要相加的奇数位
        for($k=0;$k<$len;$k++){
            if($k % 2 ==0){
                $sum_odd+=$all[$k];
            }else{
                //奇数key都是要相加的偶数和
                if($all[$k] * 2 >= 10){
                    $sum_even+=$all[$k] * 2 - 9;
                }else{
                    $sum_even+=$all[$k]*2;
                }
            }
        }
        $total=$sum_odd+$sum_even;
        if($total % 10 == 0){
            return true;
        }else{
            return false;
        }
    }

間違いがある場合は、ご指摘ください

もちろん、次のようにする必要があります。自分の家について考えてみてください。最後に、これはすべての銀行カード番号に 100% 当てはまるわけではありません。

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHP における銀行カード番号の一般的な検証アルゴリズムの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。