Maison >interface Web >js tutoriel >Jour/Jours de Code : Défi du validateur de carte de crédit

Jour/Jours de Code : Défi du validateur de carte de crédit

DDD
DDDoriginal
2024-09-18 15:08:36796parcourir

Day /  Days of Code: Credit Card Validator Challenge

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn