”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 代码日:信用卡验证器挑战

代码日:信用卡验证器挑战

发布于2024-11-05
浏览:222

Day /  Days of Code: Credit Card Validator Challenge

2024 年 9 月 15 日星期日

本周都是关于代码挑战的,这真是太棒了!一个有趣的挑战是使用 Luhn 算法实现信用卡验证器,该算法可以防止单位数信用卡错误和相邻换位(如 90 > 09)。对 Luhn 算法进行编码是完全可以实现的;让我们来看看我的实现。

首先,让我们花点时间了解一下函数式编程(FP)是什么。信用卡号验证可以是直接应用于信用卡号变量的方法,而不是使用将信用卡号排队进行测试的命令式函数。这种模块化方法增加了代码的价值,因为它可以以更多方式使用而无需重写。 FP 的一个副作用是数据成为明星,而不是函数,这看起来非常精简。

首先,我们将使用符合 FP 范式的箭头函数。这在单行函数中更重要,但仍然很实用。

  • 保留最后一位数字:Luhn 算法的第一步是将最后一位数字保留到我们命名为 lastDigit 的变量中。这遵循使用数组长度 - 1 访问数组元素的标准方法,因为数组从 0 开始元素编号。JavaScript 很好地为本机提供了此功能。

  • 反转数组:Luhn 算法从右到左处理信用卡数字。为了简单起见,我们将反转数组。 JavaScript 提供了两种方法来简化此操作:slice 用于选择第一个到倒数第二个元素,reverse 用于反转数组中元素的顺序。我们将其分配给一个名为 allExceptLastReversed 的新数组。

  • 将每个其他元素加倍:下一步需要比 JavaScript 的迭代方法提供的更精细的数组元素迭代控制,因此我们将使用传统的 for 循环。此步骤涉及将所有其他数组元素加倍,如果该值大于 9,则减去 9。

  • 对元素求和并验证:现在我们快完成了。我们想要对所有数组元素求和,并验证它们是否能被 10 整除。JavaScript 有一个名为“reduce”的迭代方法,该方法将函数(通常是求和或乘积)应用于数组中的每个元素并累加结果。在这里,我们将对反转的切片数组元素求和,添加最后一位数字,并检查模 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如有侵犯,请联系[email protected]删除
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3