>백엔드 개발 >PHP 튜토리얼 >php银行卡校验

php银行卡校验

WBOY
WBOY원래의
2016-06-23 13:25:531135검색

前言
银行金卡,维萨和万事达、银联品牌,如果是贷记卡或准贷记卡,一定为16位卡号。而借记卡可以16-19位不等。
美国运通卡则不论金卡或是白金卡、普通卡,都是15位卡号。
16-19 位卡号校验位采用 Luhm 校验方法计算

银行卡的校验方式

Luhm校验

  1. 将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2
  2. 将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
  3. 将加法和加上校验位能被 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('6225881414207430');var_dump($r);?>

准确率怎么样,附文一片
银行卡校验规则(Luhn算法)

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.