Récemment, en raison des besoins de l'entreprise, j'ai écrit quelques informationsAPI
Dans lesquelles j'avais besoin de quelques informations sur le numéro de carte bancaire Concernant cette règle de vérification, j'ai trouvé beaucoup de vérifications générales, comme le nombre de chiffres. J'ai découvert qu'un ami avait écrit une introduction plus détaillée. Un bref résumé des règles de génération de carte bancaire
L'algorithme de contrôle de Luhn, également connu sous le nom de formule du module 10, est un algorithme simple utilisé pour vérifier la validité de. cartes bancaires et numéros de carte de crédit. Fonctionne avec les cartes de crédit émises par toutes les principales sociétés de cartes de crédit, notamment American Express, Passport, MasterCard, Discover et Diners Club. Cet algorithme a été formulé à l'origine par un groupe de mathématiciens dans les années 1960. Désormais, l'algorithme du numéro de test de Luhn appartient au public et tout le monde peut l'utiliser
Supposons que vous ayez maintenant un numéro de carte China Merchants Bank6225882708965808
( Les numéros de carte bancaire grand public nationaux comportent généralement 16 ou 19 chiffres)
commencer par le dernier chiffreinverse Calculerla somme des chiffres impairs
calculer le numéro de carte comme ci-dessus
8 + 8 + 6 + 8 + 7 + 8 + 5 + 2 = 52
Commencer à partir du dernier chiffreInverser Multipliez d'abord le nombre pair chiffres2
Si le produit est à 2 chiffres, soustrayez9
Dans la sommation, si le produit n'est pas à 2 chiffres, ajoutez directement
comme ci-dessus Le numéro de carte est calculé comme suit
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
Ajoutez la somme des chiffres impairs à la somme des chiffres pairs Si le résultat est divisible par 10, cela signifie que la vérification est réussie
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; } }
S'il y a des erreurs, veuillez les signaler
Bien sûr, vous devez faire un jugement avant de faire cela, pensez à votre propre maison. Enfin, cela n’est pas applicable à 100% à tous les numéros de cartes bancaires.
Apprentissage recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!