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 还提供了逻辑比较,以评估 true 或 false,称为布尔值,即函数返回值。 JavaScript 让编程变得近乎艺术。
这个挑战是深入研究函数式和命令式编程范例的绝佳方式。它强调了编写模块化、可重用代码的重要性。当我继续我的 100 天编程之旅时,我很高兴能够应对更多挑战并扩展我对不同编程概念的理解。每一天都会带来新的学习和成长的机会,我迫不及待地想看看这段旅程下一步将带我去往何方。
请继续关注更多更新,祝您编码愉快! ?
这是完整的代码:
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); };
交叉发布:Dev https://dev.to/jacobsternx 和 LinkedIn https://www.linkedin.com/in/jacobsternx
以上是代码日:信用卡验证器挑战的详细内容。更多信息请关注PHP中文网其他相关文章!