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

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

藏色散人
풀어 주다: 2023-04-10 11:52:01
앞으로
4323명이 탐색했습니다.

최근 회사의 요구로 인해 일부 은행 카드 번호 정보가 필요한 일부 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자리🎜인 경우 <를 뺍니다. code>9 합산할 때 제품이 🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿