Dim 15 septembre 2024
Cette semaine a été placée sous le signe des défis de code, ce qui a été glorieux ! Un défi intrigant consistait à mettre en œuvre un validateur de carte de crédit utilisant l'algorithme de Luhn, qui empêche les erreurs de carte de crédit à un chiffre et les transpositions adjacentes telles que 90 > 09. Le codage de l’algorithme de Luhn est tout à fait réalisable ; passons en revue ma mise en œuvre.
Tout d’abord, prenons un moment pour comprendre ce qu’est la programmation fonctionnelle (FP). Au lieu d'avoir une fonction impérative dans laquelle vous mettez en file d'attente les numéros de carte de crédit à tester, la vérification du numéro de carte de crédit peut être une méthode que vous appliquez directement aux variables du numéro de carte de crédit. Cette approche modulaire augmente la valeur de votre code car il peut être utilisé de plusieurs façons sans réécriture. L'un des effets secondaires de FP est que les données deviennent la star, et non les fonctions, ce qui semble très rationalisé.
Pour commencer, nous utiliserons une fonction flèche conforme au paradigme FP. C'est plus important dans les fonctions sur une seule ligne, mais c'est toujours pratique.
Mettre de côté le dernier chiffre : La première étape de l'algorithme de Luhn consiste à mettre de côté le dernier chiffre dans une variable que nous nommerons lastDigit. Cela suit une méthode standard pour accéder aux éléments d'un tableau en utilisant la longueur du tableau - 1 puisque les tableaux commencent la numérotation des éléments à 0. JavaScript fournit cette fonctionnalité de manière native pour les tableaux.
Inversez le tableau : l'algorithme de Luhn fonctionne sur les chiffres des cartes de crédit de droite à gauche. Pour simplifier les choses, nous inverserons le tableau. JavaScript propose deux méthodes pour simplifier cette opération : slice pour sélectionner du premier à l'avant-dernier élément et reverse pour inverser l'ordre des éléments dans le tableau. Nous allons attribuer cela à un nouveau tableau nommé allExceptLastReversed.
Doubler tous les autres éléments : l'étape suivante nécessite un contrôle plus fin de l'itération des éléments du tableau que celui fourni par les méthodes itératives de JavaScript, nous utiliserons donc une boucle for traditionnelle. Cette étape consiste à doubler tous les autres éléments du tableau et, si la valeur est supérieure à 9, à soustraire 9.
Résumez les éléments et validez : nous avons presque terminé. Nous voulons additionner tous les éléments du tableau et vérifier qu'ils sont divisibles par 10. JavaScript a une méthode itérative nommée réduire qui applique une fonction, généralement une somme ou un produit, à chaque élément d'un tableau et accumule le résultat. Ici, nous allons additionner les éléments du tableau inversés et découpés, ajouter le dernier chiffre et vérifier si la somme modulo 10 est 0.
JavaScript fournit également des comparaisons logiques, à évaluer comme vraies ou fausses, appelées valeurs booléennes, qui sont les valeurs de retour de la fonction. JavaScript rend la programmation presque astucieuse.
Ce défi était une façon fantastique de plonger plus profondément dans les paradigmes de programmation fonctionnels et impératifs. Il a souligné l’importance d’écrire du code modulaire et réutilisable. Alors que je poursuis mon parcours de 100 jours de code, je suis ravi de relever davantage de défis et d'élargir ma compréhension des différents concepts de programmation. Chaque jour apporte de nouvelles opportunités d’apprendre et de grandir, et j’ai hâte de voir où ce voyage me mènera ensuite.
Restez à l'écoute pour plus de mises à jour et bon codage ! ?
Voici le code complet :
const validateCred = (cardNumber) => { const lastDigit = cardNumber[cardNumber.length - 1]; let allExceptLastReversed = cardNumber.slice(0, -1).reverse(); for (let i = 0; i < allExceptLastReversed.length; i += 2) { allExceptLastReversed[i] *= 2; if (allExceptLastReversed[i] > 9) { allExceptLastReversed[i] -= 9; } } const sum = allExceptLastReversed.reduce((acc, curr) => acc + curr, 0) + lastDigit; // sum all digits return (sum % 10 === 0); };
Position croisée : Dev https://dev.to/jacobsternx et LinkedIn https://www.linkedin.com/in/jacobsternx
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!