«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > День/Дни кода: испытание для валидатора кредитных карт

День/Дни кода: испытание для валидатора кредитных карт

Опубликовано 5 ноября 2024 г.
Просматривать:659

Day /  Days of Code: Credit Card Validator Challenge

Вс, 15 сентября 2024 г.

Эта неделя была посвящена задачам по написанию кода, и это было великолепно! Одной из интригующих задач была реализация валидатора кредитных карт с использованием алгоритма Луна, который предотвращает однозначные ошибки кредитной карты и смежные транспозиции, такие как 90 > 09. Закодировать алгоритм Луна вполне достижимо; давайте рассмотрим мою реализацию.

Во-первых, давайте разберемся, что такое функциональное программирование (ФП). Вместо обязательной функции, в которой вы ставите в очередь номера кредитных карт для проверки, проверка номера кредитной карты может быть методом, который вы применяете непосредственно к переменным номера кредитной карты. Этот модульный подход увеличивает ценность вашего кода, поскольку его можно использовать разными способами без переписывания. Одним из побочных эффектов ФП является то, что звездой становятся данные, а не функции, что выглядит очень упрощенным.

Для начала мы будем использовать стрелочную функцию в соответствии с парадигмой FP. Это более важно в однострочных функциях, но все же практично.

  • Отложить последнюю цифру. Первый шаг алгоритма Луна — отложить последнюю цифру в переменную, которую мы назовем LastDigit. Это следует стандартному методу доступа к элементам массива с использованием длины массива - 1, поскольку нумерация элементов массивов начинается с 0. JavaScript прекрасно предоставляет эту функцию изначально для массивов.

  • Обратный массив: алгоритм Луна работает с цифрами кредитной карты справа налево. Для простоты мы перевернем массив. JavaScript предоставляет два метода для упрощения этой операции: срез для выбора элементов от первого до предпоследнего и обратный для изменения порядка элементов в массиве. Мы назначим это новому массиву с именем allExceptLastReversed.

  • Удвоение каждого другого элемента. Следующий шаг требует более точного управления итерацией элементов массива, чем обеспечивают итеративные методы JavaScript, поэтому мы будем использовать традиционный цикл for. Этот шаг включает удвоение каждого второго элемента массива, а если значение больше 9, вычитание 9.

  • Суммируйте элементы и подтвердите: теперь мы почти закончили. Мы хотим просуммировать все элементы массива и убедиться, что они делятся на 10. В JavaScript есть итерационный метод с именем «reduce», который применяет функцию (обычно sum или product) к каждому элементу массива и накапливает результат. Здесь мы суммируем перевернутые, разрезанные элементы массива, добавляем последнюю цифру и проверяем, равна ли сумма по модулю 10 0.

JavaScript также обеспечивает логические сравнения для оценки истинности или ложности, называемые логическими значениями, которые являются возвращаемыми значениями функции. JavaScript делает программирование почти искусным.

Этот вызов стал отличным способом глубже погрузиться в функциональную и императивную парадигмы программирования. Он подчеркнул важность написания модульного кода многократного использования. Продолжая свое путешествие «100 дней кода», я с нетерпением жду возможности решать новые задачи и расширять свое понимание различных концепций программирования. Каждый день приносит новые возможности для обучения и роста, и мне не терпится увидеть, куда меня приведет это путешествие дальше.

Следите за обновлениями и удачного программирования! ?

Вот полный код:

const validateCred = (cardNumber) => {
  const lastDigit = cardNumber[cardNumber.length - 1];
  let allExceptLastReversed = cardNumber.slice(0, -1).reverse();
  for (let i = 0; i  9) {
      allExceptLastReversed[i] -= 9; 
    }
  }
  const sum = allExceptLastReversed.reduce((acc, curr) => acc   curr, 0)   lastDigit; 
  // sum all digits
  return (sum % 10 === 0);
};

Перекрестная публикация: Dev https://dev.to/jacobsternx и LinkedIn https://www.linkedin.com/in/jacobsternx

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/jacobsternx/day-77-100-days-of-code-credit-card-validator-challenge-93m?1 Если есть какие-либо нарушения, свяжитесь с Study_golang@163. .com, чтобы удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3