首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我尝试用Javascript实现Luhns算法,但我的程序总是无限循环

Luhns算法,也称为Luhn算法或模10算法,是一种用于验证身份证号码、信用卡号码等数字的有效性的算法。该算法通过对数字进行加权求和并进行模10运算,从而判断数字是否有效。

在使用Javascript实现Luhns算法时,可能会出现无限循环的问题。这通常是因为在算法的实现过程中存在错误或逻辑问题导致的。以下是一个可能导致无限循环的常见错误示例:

代码语言:txt
复制
function luhnsAlgorithm(number) {
  let sum = 0;
  let isDouble = false;

  for (let i = number.length - 1; i >= 0; i--) {
    let digit = parseInt(number.charAt(i));

    if (isDouble) {
      digit *= 2;
      if (digit > 9) {
        digit -= 9;
      }
    }

    sum += digit;
    isDouble = !isDouble;
  }

  return sum % 10 === 0;
}

let number = "1234567890123456";
console.log(luhnsAlgorithm(number));

在上述示例中,循环的终止条件可能存在问题,导致无限循环。为了解决这个问题,我们可以修改循环的终止条件,确保在处理完所有数字后退出循环。以下是修正后的示例:

代码语言:txt
复制
function luhnsAlgorithm(number) {
  let sum = 0;
  let isDouble = false;

  for (let i = number.length - 1; i >= 0; i--) {
    let digit = parseInt(number.charAt(i));

    if (isDouble) {
      digit *= 2;
      if (digit > 9) {
        digit -= 9;
      }
    }

    sum += digit;
    isDouble = !isDouble;
  }

  return sum % 10 === 0;
}

let number = "1234567890123456";
console.log(luhnsAlgorithm(number));

修正后的代码中,我们使用了正确的循环终止条件,确保在处理完所有数字后退出循环。这样,我们就可以避免无限循环的问题。

关于Luhns算法的更多信息,你可以参考以下链接:

请注意,以上回答仅供参考,具体实现可能因个人需求和环境而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Fundebug 微信小程 BUG 监控插件更新至 1.2.1,优化错误上报次数限制算法

摘要: 1.2.1优化错误上报次数限制算法,新增silentHttpHeader配置选项,请大家及时更新哈!...欢迎大家免费试用,也欢迎各位用户反馈建议或者问题。 优化错误上报次数限制算法 在小程序生命周期之内,Fundebug 最多错误上报次数为 50 次,这是为了避免无限循环导致无限报错。...这里所说生命周期,指的是小程序仍然存在于内存里面。 根据微信小程序文档,wx.request最大并发限制是  10  个。...参考 Fundebug 文档 - silentHttpHeader 微信小程序文档 - 网络 关于Fundebug Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React...欢迎大家免费试用

53640

一道Google面试题:如何分解棘手问题(下)

虽然我们仍然可以在JavaScript中模拟尾部递归,但我们将保持这种简单性,并创建一个典型递归函数。 在编写代码之前,我们需要弄清楚我们算法。对于递归,使用深度优先搜索是有意义。...当我们将当前节点连接到连续ID上时,就会发生这种情况。每次我们进一步重复,我们都要确保在循环其相邻节点之前将当前节点添加到连续ID列表中。 始终添加当前节点可确保不会无限重复。...回到循环顶端,本可以使用while(true),但我想要一个防止出现问题方法,这在调试时很有用,因为无限循环是一件很麻烦事情。 在那之后,我们将拼接节点。...每次,都会想出更好想法,但一直遇到JavaScript速度限制。 本来可以做优化有一个完整列表,但是以代码可读性为代价。不想要那样(反正还是用过)。...想强调是,TechLead问题可能是你在职业生涯中遇到;也许是这样,但是在典型JavaScript应用程序中,速度从来都不是一个因素,这非常罕见。

85930

Js算法与数据结构拾萃(1)

主要阐述一些基于JavaScript数据结构和算法基础。 ? 哪些是需要学习?...测试用例给都是乱序,因此,基于乱序试用例,如果不排序,是无法优化算法。尤其是数组去重,能不做就不做。 所以考虑排序。那么对剩下数组就转化为了两数月之和等于-nums[i]问题。...看了那么多条件语句可能会很恶心,但算法绝多数时候不是有大道至简这种说法。事实上上述代码还有多处边界情况可调优,可以说,你帮电脑考虑得越周到,程序就越快。...然而,递归在程序世界总是恐怖存在。 ? 递归涉及了大量重复计算。以求解fib(5)为例:递归树就重复了3次fib(2)计算。 ? 解法二:递推 想解法二才是需要考察程序员思维。...变化图:取巧 做算法题总不乏一群取巧的人。他们给出了各种有意思答案。 测试用例仅仅能支持到N=31时情况。

74330

分享 7 个你可能喜欢 JS 小技巧

知道这一点是因为和我杰出合著者亚当斯科特一起写了一些内容。 为了纪念这个版本,决定收集一些最喜欢 JavaScript 片段。不是在谈论大量功能、框架或自动生成代码。...这个领域变得非常深入和复杂,但我总是保持简单而快速 Mulberry32 算法来给我完全确定性伪随机数(这意味着如果你从相同种子开始,你总是得到相同列表值)。...将它封装在一个生成器函数中,这是最喜欢 JavaScript 专用特性之一。...,它是从经典 C 实现中借来。...value); // 0.7620641703251749 console.log(generator.next().value); // 0.0211441791616380 这个生成器函数包装了一个无限循环

51120

脑洞:如何用一个整数来表示一个列表?

这是因为列表生成式、range 和大多数你打算在 for 循环中使用东西,都被禁止用在只有 int 类型方言中。所有这些都被 while 循环替代了。...可能很快会写一篇完整关于生成质数算法文章,因为这是一个很酷的话题,本身也是一个古老研究领域。...以后可能会写其它文章,介绍更好用于生成和分解质数算法,以及其它复杂数据结构 int 表示形式。 脚注 认为在内存不足之前,程序也会出现中断,但是文档确实明确地提到它们具有无限精度。...认为在 2020 年用 Python 指代 Python3 是没问题但我也认为这个细节值得加一条脚注。 对于用哥德尔数表示列表,这很容易被反驳说是一种糟糕表示形式。...另请参见《 The Genuine Sieve of Erathosthenes》论文,它澄清了这一算法是如何被定义。 Python猫注: 以上是全部译文,但我最后还想补充一个有趣内容。

52920

一个快速 Vue3 无限滚动组件

现在,让我们一起来看看这个组件实现过程。 为什么还要使用无限滚动组件? 我们都见过使用无限滚动来显示其内容网站示例,但是什么时候使用它,它效果会比使用典型分页系统更好呢?...你可以阅读之前分享一篇文章《无限滚动与分页哪个用户体验更好?如何正确使用它们》,在这里,只简单总结一下它们有缺点。...这个 API 调用可以是任何东西,从简单应用程序简单数据库查询一直到更高级应用程序复杂推荐算法。...v-for 循环来迭代我们内容并为每个内容呈现一个 PostComponent。...由于 API 调用将是异步,因此创建某种加载微调器,在加载新数据时显示 创建更复杂 API 算法并将其连接到数据库 为每个内容添加更多数据并找到显示它新方法 结论 希望本教程对你熟悉 Vue3

2.1K20

【翻译】为什么 goroutine 栈内存无穷大?

一些 Go 语言新学习者总是会对 goroutine 栈内存占用大小感到非常好奇。这一般是由于程序员进行无限函数循环调用导致。...许多程序员都曾经写过类似的代码而导致函数无限循环调用,并使得他们程序崩溃,但一般情况下并不足以对他们机器造成毁灭性破坏。问题是,为什么 Go 程序就特殊一点呢?...当函数执行完毕,事情并没有就此结束,函数返回参数又被拷贝至调用者栈结构中,然后释放无用栈空间。 通过这个过程,有效地实现了栈内存无限使用。...但是一直注意到一个问题,当你程序存在函数无限循环调用而即将导致你操作系统内存枯竭,而此时又恰好需要分配新栈页面,则会从堆中分配内存。...相信这很快就会使程序用光你机器所有空余物理内存,交换存储器也会被大量使用,最终导致你系统变得非常不稳定。

1K60

一周技术学习笔记(第93期)-请用代码优雅取悦你领导

1、请用代码优雅取悦你领导 发现身边有很多人,总是喜欢学习和研究分布式架构相关知识点,却不喜欢读《重构》、《代码整洁之道》这一类能够提高程序员最本质写代码手艺书籍。...然而,每次CODE REVIEW,总会有一些让人摸不着头脑要讲半天代码。 或许是人人都是架构师这个环境,让架构课程戳手可得,确让人忘了自己应该去追求整洁代码之美。...所有的事物都是变化; 所有变化都不是100%可靠; 结论:所有事物都不是100%可靠; ”从概率学角度分析,凡是有可能会出错地方,只要变化次数足够多,最终出错概率会无限趋向于1“ 3、一个系统为什么出现熵增...重构,其实是不改变功能情况下,变更实现方式;而单元测试,就是固化下来,可重复执行试用例。 代码本身质量不好,单元测试难写;单元测试难写,代码质量无法快速提升;恶性循环。...代码质量高,单元测试质量也高;相辅相成。 这里记录,每周碰到,或想到,引起触动,或感动,事物思考及笔记。不见得都对,但开始思考记录总是

22610

软件测试测试开发|常见软件测试框架类型:TDD、BDD、DDD、ATDD、DevOps介绍

测试驱动开发(TDD)测试驱动开发是一种开发方法,其核心理念是在编写实际代码之前先编写测试用例。这些测试用例描述了所期望代码行为。开发者根据这些测试用例来编写代码,以确保代码通过所有测试并符合预期。...对于一个业务模型及其复杂、内部模块之间相互依赖性非常强项目,采用TDD反而会得不失,这会导致程序员在拆分接口和写测试代码时候工作量非常大。...另外,由于模块之间依赖性太强,我们在写测试代码时候可能不采取一些桥接模式来实现,这样势必加大了程序工作量。...行为驱动开发(BDD)行为驱动开发是一种软件开发方法,旨在促进团队成员之间更好沟通和合作。BDD关注是软件行为及其预期结果,通过用自然语言编写场景和规范来描述应用程序行为。...常用BDD框架有Cucumber(支持多种语言,如Java、JavaScript和Ruby)、Behave(Python)和SpecFlow(针对.NET平台)。

29110

编写快速安全Bash脚本建议

我们会包含: 一些bash基础知识(“你怎么写一个for循环”) 杂项事宜(“总是引用你bash变量”) bash脚本安全提示(“总是使用set -u”) 如果你编写shell脚本,并且你没有阅读这篇文章中其他任何内容...还有 局部变量 ,它们作用域只能存在于bash函数中。 基本上从来没有使用过这样函数(不像我写其他编程语言),从来没有使用过局部变量。 for循环 以下是在bash中编写循环方法。...你也可以写while循环但我从来没有这样写过。 有个很酷事情是你可以遍历另一个命令输出。seq 1 10 将数字从1到10(每行一个)打印,这个for循环只是提取该输出并遍历它。...肯定不能。 总是引用你 bash 变量,你会更快乐。 返回代码, &&, 和 `|| 每个 Unix 程序都有一个“返回代码”,它是一个从0到127整数。0表示成功,其他都意味着失败。...这在 bash 中是有作用,因为:有时从命令行运行一个程序,并希望仅在第一个程序成功情况下运行第二个程序。 你可以用 && 实现

1.8K80

JavaScript生态加速攻略:eslint

,for-of循环已在各处得到支持,因此再次修改了包,并将函数实现替换为源代码中原始版本。...另外,还尝试用标准for循环替换for-of循环进行了测量。...到目前为止,我们看了实现细节,但我们实际上正在处理什么样选择器?有没有潜力缩短其中一些?为了测试这个理论,首先需要更好地了解正在处理选择器类型。毫不奇怪,大多数选择器都很短。...这个小实验证实了假设,即我们为选择器引擎付出了相当多时间。 第三方插件和预设影响 尽管从eslint设置中可以看到更多优化空间,但我开始想知道是否花时间优化了正确东西。...话虽如此,在vite代码库(144个文件)上运行所有这些数字结果如下。 根据这些数字,相当有信心,仅通过这个小实验,我们就可以用 JavaScript 实现非常接近 Rust 性能。

60520

你可能不知道10个JavaScript小技巧

尽管我使用Javascript来做开发有很多年了,但它常有一些让很惊讶小特性。对于我来说,Javascript是需要持续不断学习。...在这篇文章中,将列出10个Javascript使用小技巧,主要面向Javascript新手和中级开发者。希望每个读者都能至少从中学到一个有用技巧。...您可以为指定一个字符串作为window.name属性值,直到您关闭该标签或窗口。虽然没有提供任何脚本,但我强烈建议您如充分利用这个方法。...举例来说,在建设一个网站或应用程序时候,在调试和测试模式之间切换是非常有用。 6.判断属性是否存在 这个问题包含两个方面,既有检查属性时候存在,还要获取属性类型。...但我总是忽略了这些小事情: // BAD: This will cause an error in code when foo is undefined if (foo) {   doSomething

28420

针对高级前端8个级JavaScript面试问题

因为数组长度不断增加,循环条件(i < array.length)始终为真。这使得循环无限进行下去,导致程序陷入僵局。...为了解决由于数组长度增长而导致无限循环问题,可以在进入循环之前将数组初始长度存储在一个变量中。然后,可以使用这个初始长度作为循环迭代限制。...[1, 2, 3]; const newArr = duplicate(arr); console.log(newArr); 输出将显示数组末尾重复元素,并且循环不会导致无限循环: [1, 2, 3...为了实现这一点,JavaScript 依赖两个特殊方法:valueOf 和 toString。 valueOf 方法是JavaScript对象转换机制一个基础部分。...在JavaScript中,对象键总是字符串(或 symbols),或者通过隐式强制转换自动转换为字符串。

20330

IC验证工程师是怎么样存在?

先看看百度百科解释:IC验证工程师,工作主要是根据芯片规格和特点设计并实现验证环境;根据芯片或模块规格,利用已实现验证环境进行验证和回归。...既然要验证,那就涉及到验证平台搭建,验证环境建立,总结功能点,编写测试用例,编写验证文档,写脚本等等。大公司一般都分工明确,是小公司,什么都干。 好像还不懂?...另外,还要尝一口味对不对,客户想要辣,他炒出一盘甜,怎么能忍,怎么能下口?...要,但不是一天天狂敲代码。作为一个IC验证工程师,你是半个程序员。...测试用例都是用代码写,所以敲代码避免不了。但是,觉得IC验证工程师重要不是敲代码,而是对芯片功能理解,验证方案设计,其次才是代码实现,而实现起来也很简单,再不行,翻翻工具书嘛。 2.

86920

针对高级前端8个级JavaScript面试问题

因为数组长度不断增加,循环条件(i < array.length)始终为真。这使得循环无限进行下去,导致程序陷入僵局。...为了解决由于数组长度增长而导致无限循环问题,可以在进入循环之前将数组初始长度存储在一个变量中。然后,可以使用这个初始长度作为循环迭代限制。...[1, 2, 3]; const newArr = duplicate(arr); console.log(newArr); 输出将显示数组末尾重复元素,并且循环不会导致无限循环: [1, 2, 3...为了实现这一点,JavaScript 依赖两个特殊方法:valueOf 和 toString。 valueOf 方法是JavaScript对象转换机制一个基础部分。...在JavaScript中,对象键总是字符串(或 symbols),或者通过隐式强制转换自动转换为字符串。

17310

Node.js多线程完全指南

事件循环是一种机制,它采用回调(函数)并注册它们,准备在将来某个时刻执行。它与相关 JavaScript 代码在同一个线程中运行。当 JavaScript 操作阻塞线程时,事件循环也会被阻止。...工作池用 libuv 实现,当 Node 需要在 JavaScript 和 C++ 之间进行内部通信时,会导致轻微延迟,但这几乎不可察觉。...引用自 Mozilla: 它通过递归输入对象来进行克隆,同时保持之前访问过引用映射,以避免无限遍历循环。 该算法不复制函数、错误、属性描述符或原型链。...还需要注意是,以这种方式复制对象与使用 JSON 不同,因为它可以包含循环引用和类型化数组,而 JSON 不能。 由于能够复制类型化数组,该算法可以在线程之间共享内存。...实现 setTimeout setTimeout 是一个无限循环,顾名思义,用来检测程序运行时间是否超时。它在循环中检查起始时间与给定毫秒数之和是否小于实际日期。

4.1K21

背包九讲——完全背包

---- 所属专栏:戳访问 再来看看《背包问题九讲》是怎么解决这个问题: 基本思路 这个问题非常类似于01背包问题,所不同是每种物品有无限件。...然而这个并不能改善最坏情况复杂度,因为有可能特别设计数据可以一件物品也去不掉。 ---- 因为这个优化十分简单,代码实现不难,且优化时间只是常数级别的,故不给出理解和代码。...---- 好了,终于到了今天最想讲O(VN)优化了,我们先来看一看《背包问题九讲》里是怎么写: O(VN)算法 这个算法使用一维数组,先看伪代码: for i=1..N for...这就是这个简单程序为何成立道理。 值得一提是,上面的伪代码中两层for循环次序可以颠倒。这个结论有可能会带来算法时间常数上优化。 这个算法也可以以另外思路得出。...理解是:先来看看上次写01背包:戳访问,可以发现,在01背包使用一维数组时,v循环是从后往前,原因是不然程序重复使用一个物品,那么这里可以重复使用同一个物品,直接换成从前往后不就行了吗!

27300

之所以被裁也许是少了这些东西

人们总是认为很多。 这种想法并不那么差劲,所以我对此并不排斥。 (不过有少数人尽管知识渊博,但他们往往遭受相反偏见,这很糟糕。)...在这篇文章中,将提供一个不完整编程主题列表,关于这些东西,人们总是错误地认为很懂。 并不是说你不需要学习它们,或者不知道其他有用东西。...(因为使用C#,所以可能会接受它。) 算法。没有什么比美好一天被冒泡排序或者快速排序毁掉更糟糕事了。 如果它们与特定实际问题联系在一起,可以完成简单图形遍历任务。...虽然知道O(n)符号是怎么回事,但我理解也仅限于“不要在循环中放置循环”。 函数式语言。不了解任何一种函数式语言,除非你把JavaScript算进去。...曾经用过一两次古老Node streams,但总是把错误处理搞得一团糟。 Electron。没用过。 TypeScript。理解类型概念,可以阅读注释,但我没有用它写过什么东西。

47820

一篇文章带你了解JavaScript While 循环

二、无限循环 无限循环顾名思义,是一个循环,将永远保持运行。 如果不小心造成无限循环,可能会导致浏览器或计算机崩溃。重要是要意识到无限循环,以便您可以避免它们。...当while语句条件设置为true时,会发生一个常见无限循环。...while (true) { statement // 永远执行代码 } 无限循环将永远运行,但是可以使用break关键字终止程序。 三、Do ......不要忘记增加条件中使用变量,否则循环将永远不会结束。 注意:即使条件为false,这个循环总是至少执行一次,因为代码块是在条件测试之前执行。...将发现while循环与for循环非常相似,只是省略了初始化和最终表达式。 五、总结 本文基于JavaScript基础。

90310
领券