>  기사  >  백엔드 개발  >  PHP의 은행 카드 번호에 대한 일반적인 확인 알고리즘 요약

PHP의 은행 카드 번호에 대한 일반적인 확인 알고리즘 요약

藏色散人
藏色散人앞으로
2021-07-26 15:23:404169검색

최근 회사의 요구로 인해 일부 은행 카드 번호 정보가 필요한 일부 API를 작성했는데, 이 확인 규칙과 관련하여 자릿수를 가져오는 등 대략적인 확인이 많이 발견되었습니다. 나중에 친구를 만나 은행 카드 생성 규칙에 대한 자세한 소개를 작성하고 간단한 요약을 작성했습니다API 其中需要一些银行卡号的信息 关于这个验证正则找了好多 都是些大致性的校验 比如数字拉 位数啦,后来发现一哥们写了个比较详细的介绍银行卡的生成规则  做个小总结

LUHN 算法

检验数字算法 (Luhn Check Digit Algorithm) 也叫作模数10公式是一种简单的算法,用于验证银行卡、信用卡号码的有效性的算法。对所有大型信用卡公司发行的信用卡都起作用,这些公司包括美国Express、护照、万事达卡、Discover和用餐者俱乐部等。这种算法最初是在20世纪60年代由一组数学家制定,现在Luhn检验数字算法属于大众,任何人都可以使用它

luhn 算法原理

假设现在有一个招行卡号 6225882708965808 (国内一般的主流银行卡号 一般是16位 或者19位 )

步骤一

从最后一位开始 逆向 计算 奇数 位相加之和

如上面的卡号 计算入下

8 + 8 + 6 + 8 + 7 + 8 + 5 + 2 = 52

步骤二

从最后一位开始 逆向偶数 位先乘 2 如果乘积为 2位数 则减去9

LUHN 알고리즘

계수 10 공식이라고도 불리는 Check Digit Algorithm(Luhn Check Digit Algorithm)은 검증에 사용되는 간단한 알고리즘 은행 카드 및 신용 카드 번호의 유효성에 대한 알고리즘입니다. American Express, Passport, MasterCard, Discover 및 Diners Club을 포함한 모든 주요 신용 카드 회사에서 발행한 신용 카드를 사용할 수 있습니다. 이 알고리즘은 원래 1960년대 수학자 그룹에 의해 공식화되었습니다. 이제 Luhn 테스트 번호 알고리즘은 대중에게 속해 있으며 누구나 사용할 수 있습니다

luhn 알고리즘 원리

현재 China Merchants Bank 카드 번호 6225882708965808 (일반 국내 주류 은행 카드번호는 보통 16자리 또는 19자리입니다.)

1단계

마지막 자리부터 시작

역으로

계산

홀수자리의 합을 계산대로

위 카드번호로 다음 🎜
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
🎜🎜🎜2단계🎜🎜마지막 숫자부터 시작🎜Reverse🎜 🎜짝수🎜 숫자에 2를 먼저 곱하고 제품이 🎜2자리🎜인 경우 9 code> 합산할 때 제품이 🎜2자리🎜가 아니면 직접 추가하세요🎜🎜예를 들어 위의 카드번호는 다음과 같이 계산됩니다🎜
52 + 28 = 80
80 % 10 = 0
🎜3단계🎜🎜홀수의 합을 더하세요 결과를 10으로 균등하게 나눌 수 있으면 검증 통과🎜
    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;
        }
    }
🎜🎜🎜PHP 버전의 luhn 알고리즘🎜rrreee🎜🎜오류가 있으니 지적해주세요🎜🎜🎜Of 물론, 이 일을 하기 전에 몇 가지 판단을 내려야 합니다. 자신의 집을 생각해 볼 수도 있습니다. 마지막으로, 이는 모든 은행 카드 번호에 100% 적용되는 것은 아닙니다. 🎜🎜🎜추천 학습: "🎜PHP 비디오 튜토리얼🎜"🎜🎜

위 내용은 PHP의 은행 카드 번호에 대한 일반적인 확인 알고리즘 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제