Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ringkasan algoritma pengesahan umum untuk nombor kad bank dalam PHP

Ringkasan algoritma pengesahan umum untuk nombor kad bank dalam PHP

藏色散人
藏色散人ke hadapan
2021-07-26 15:23:404293semak imbas

Baru-baru ini saya menulis sesuatu kerana keperluan syarikatAPI Saya memerlukan beberapa maklumat nombor kad bank mengenai peraturan pengesahan ini, saya mendapati banyak pengesahan kasar seperti tarik nombor Kemudian saya mendapati bahawa seorang rakan menulis Pengenalan yang lebih terperinci kepada peraturan penjanaan kad bank dan ringkasan ringkas

Algoritma LUHN

Algoritma Digit Semak (Algoritma Digit Semak Luhn) juga dipanggil modulus 10 Formula ialah algoritma mudah yang digunakan untuk mengesahkan kesahihan nombor kad bank dan kad kredit. Berfungsi dengan kad kredit yang dikeluarkan oleh semua syarikat kad kredit utama termasuk American Express, Passport, MasterCard, Discover dan Diners Club. Algoritma ini pada asalnya dirumuskan oleh sekumpulan ahli matematik pada tahun 1960-an Kini algoritma berangka ujian Luhn dimiliki oleh orang ramai dan sesiapa sahaja boleh menggunakannya

prinsip algoritma luhn

Katakan anda kini mempunyai nombor kad China Merchants Bank6225882708965808 (nombor kad bank domestik arus perdana biasanya 16 atau 19 digit)

Langkah 1

Mulakan dari yang terakhir digit Mula terbalikkan dan hitung jumlah ganjil bit

kira nombor kad seperti di atas

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

Langkah 2

Mulakan dari digit terakhirTerbalikkan Darab nombor genap digit dahulu2 Jika hasil darabnya 2 digit kemudian tolak 9 daripada Jika jumlahnya bukan 2 digit, tambahkan terus

Sebagai contoh, hitung nombor kad di atas ke dalam

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

Langkah 3

berikut

Tukar nombor ganjil Jika jumlah bit ditambah kepada jumlah bit genap, jika hasilnya boleh dibahagi dengan 10, pengesahan diluluskan

52 + 28 = 80
80 % 10 = 0

Versi PHP algoritma luhn

    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;
        }
    }

mempunyai ralat yang saya harap nyatakan

Sudah tentu anda perlu membuat pertimbangan sebelum melakukan ini, fikirkan rumah anda sendiri. Akhir sekali, ini tidak 100% terpakai untuk semua nombor kad bank.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Ringkasan algoritma pengesahan umum untuk nombor kad bank dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam