ホームページ  >  記事  >  バックエンド開発  >  PHP 銀行カード認証 (Lhm 認証)

PHP 銀行カード認証 (Lhm 認証)

WBOY
WBOYオリジナル
2016-06-20 13:03:251505ブラウズ

銀行のゴールド カード、Visa、MasterCard、UnionPay ブランド、クレジット カードまたは準クレジット カードの場合は、16 桁のカード番号が必要です。デビットカードには 16 ~ 19 桁の数字を含めることができます。
アメリカン・エキスプレス・カードは、ゴールド・プラチナ・普通カードを問わず、すべて15桁のカード番号を持っています。
カード番号の 16 ~ 19 桁のチェック桁は、ルーム チェック方式を使用して計算されます

銀行カードの認証方法
ルームチェック

チェックデジットなしの15桁のカード番号を右から1~15まで番号を付け、奇数桁の数字を2倍します
奇数桁の積の 10 桁をすべて加算し、偶数桁のすべての数値を加算します
合計とチェック デジットを加算すると 10 で割り切れます。

<?php
/*
  16-19 位卡号校验位采用 Luhm 校验方法计算:
    1,将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2
    2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
    3,将加法和加上校验位能被 10 整除。
*/
function luhm($s) {
    $n = 0;
    for ($i = strlen($s); $i >= 1; $i--) {
        $index=$i-1;
        //偶数位
        if ($i % 2==0) {
            $n += $s{$index};
        } else {//奇数位
            $t = $s{$index} * 2;
            if ($t > 9) {
                $t = (int)($t/10)+ $t%10;
            }
            $n += $t;
        }
    }
    return ($n % 10) == 0;
}

$r = luhm(&#39;6225881414207430&#39;);
var_dump($r);
?>


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。