最近、会社のニーズにより、銀行カード番号情報が必要な API
を作成しました。この検証ルールに関しては、番号のプルなどの一般的な検証が多数見つかりました。そして後で、友人が銀行カードを生成するためのルールについて比較的詳細な紹介文を書いており、その短い要約を作成していることに気づきました。
チェック デジット アルゴリズム (Luhn Check)数字アルゴリズム) とも呼ばれます。モジュラス 10 式は、銀行カードおよびクレジット カード番号の有効性を検証するために使用される単純なアルゴリズムです。 American Express、Passport、MasterCard、Discover、Diners Club など、すべての主要なクレジット カード会社が発行したクレジット カードに対応しています。このアルゴリズムは、もともと 1960 年代に数学者のグループによって定式化されました。現在、ルーン テスト数値アルゴリズムは一般に公開されており、誰でも使用できます
6225882708965808 (国内の主流の銀行カード番号は通常 16 桁または 19 桁です)
逆方向 奇数 桁の合計を計算
たとえば、上のカード番号を次の8 + 8 + 6 + 8 + 7 + 8 + 5 + 2 = 52
最初の 偶数 桁に 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
52 + 28 = 80 80 % 10 = 0
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 中国語 Web サイトの他の関連記事を参照してください。