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 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
Katakan anda kini mempunyai nombor kad China Merchants Bank6225882708965808
(nombor kad bank domestik arus perdana biasanya 16 atau 19 digit)
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
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
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
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!