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
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3