问题标签 [luhn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
12627 浏览

java - 奇数位数之和

我试图通过这样做来总结卡号中的所有其他数字:

我得到的只是 6。我要找的总和应该是 37。

0 投票
1 回答
1747 浏览

algorithm - 如何使用 notepad++ 搜索 16 位长字符串(Luhn 算法)?

我有一个包含信用卡号码的大文本文件,有人告诉我需要查看这个文件,然后找到可能的信用卡号码,我一直在使用 Notepad ++ 'Find in Files' 正则表达式搜索模式使用这个简单的表达式:4\d{15}(搜索以 4 开头的 16 位长字符串,通常是 VISA 借记卡/贷记卡),然后我将其复制并粘贴到信用卡验证脚本中。

无论如何要创建一个表达式来搜索以 4 开头的 16 位长字符串,并检查它是否使用 Luhn 算法(确保它有效)。

这是卢恩算法:

1) 从倒数第二个数字开始向左移动,将所有交替数字的值加倍。

2) 从左边开始,取所有未受影响的数字,并将它们添加到步骤 1 中所有单个数字的结果中。如果步骤 1 中的任何数字的结果是两位数,请务必先将两个数字相加(即 18 将产生 1+8)。基本上,你的方程看起来像一个添加每个数字的常规加法问题。

3) 第 2 步的总数必须以零结尾,信用卡号才有效。

资料来源:http ://www.webopedia.com/TERM/L/Luhn_formula.html

0 投票
0 回答
42557 浏览

java - 使用 luhn 算法验证信用卡号

我对以下编程作业有疑问。

信用卡号码遵循某些模式。信用卡必须有 13 到 16 位数字。它必须以:

• 4 个 Visa 卡

• 5 个主卡

• 美国运通卡 37

1954 年,IBM 的 Hans Luhn 提出了一种验证信用卡号码的算法。该算法可用于确定卡号是否正确输入或信用卡是否被扫描仪正确扫描。几乎所有的信用卡号码都是在这个有效性检查之后生成的,通常称为 Luhn 检查或 Modulus 10 检查,可描述如下。为了说明,请考虑卡号 4388576018402625。

  1. 从右到左每隔一个数字加倍。如果一个数字加倍得到一个 2 位数的数字,则将这两个数字相加得到一个个位数的数字。

2 x 2 = 4

2 x 2 = 4

4 x 2 = 8

1 x 2 = 2

6 x 2 = 12 (1+2= 3)

5 x 2 = 10 (1+0= 1)

8 x 2 = 16 (1+6= 7)

4 x 2 = 8

  1. 将步骤 1 中的所有个位数相加 4 + 4 +8 + 2 +3 + 1 + 7 + 8 = 37

  2. 将卡号从右到左奇数位的所有数字相加

5 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 37

  1. 将步骤 2 和步骤 3 的结果相加 37 + 37 = 74

  2. 如果 step 的结果能被 10 整除,则卡号有效;否则无效。例如号码4388576018402625无效,但号码4388576018410707是有效的Visa卡;号码 6011000593748745 无效,但号码 6011000593748746 是有效的 Discover 卡。

我试图解决它,如以下代码所示:

我的问题是如何使用数组来存储信用卡号而不是使用长号。

0 投票
3 回答
6583 浏览

python - 在python中生成IMEI

您好,我正在尝试在 python 中创建一个函数来生成有效的 IMEI 号码,所以这是我的函数。IMEI 验证使用 Luhn 算法,所以我试图在我的脚本中实现它。

但是,该功能无法生成有效的 IMEI 号码。我在维基百科上找到了一篇文章,告诉我如何生成校验位(http://en.wikipedia.org/wiki/Luhn_algorithm

校验位 (x) 是通过计算数字总和然后计算该值的 9 倍模 10 获得的(在等式形式中,(67 * 9 mod 10))。算法形式: 1.计算数字的总和(67)。2.乘以 9 (603)。3.最后一位,3,是校验位。

我错过了什么还是维基错了?

0 投票
12 回答
54356 浏览

java - 使用 Luhn 算法检查信用卡有效性

我尝试使用 Luhn 算法检查信用卡的验证,其工作步骤如下:

  1. 从右到左每隔一个数字加倍。如果一个数字加倍得到两位数,则将两位数相加得到一位数。

    2 * 2 = 4

    2 * 2 = 4

    4 * 2 = 8

    1 * 2 = 2

    6 * 2 = 12 (1 + 2 = 3)

    5 * 2 = 10 (1 + 0 = 1)

    8 * 2 = 16 (1 + 6 = 7)

    4 * 2 = 8

  2. 现在添加步骤 1 中的所有个位数。

    4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37

  3. 将卡号中奇数位的所有数字从右到左相加。

    6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38

  4. 将步骤 2 和步骤 3 的结果相加。

    37 + 38 = 75

  5. 如果第 4 步的结果能被 10 整除,则卡号有效;否则无效。例如,号码 4388576018402626 无效,但号码 4388576018410707 有效。

简单地说,我的程序总是对我输入的所有内容显示有效。即使它是一个有效数字并且 sumOfOddPlace 和 sumOfDoubleEvenPlace 方法的结果为零。
任何帮助表示赞赏。

0 投票
2 回答
3560 浏览

android - LUHN 信用卡验证在有效卡号上失败

在我的应用程序中,我想检查用户是否输入了我使用 LUHN 算法的有效卡号。我已将其创建为方法并在 mainactivity 中调用。但即使我提供有效的卡号,它也会显示无效。输入卡号时,我在两者之间给出了空格,我不知道,因为它没有正确验证。请帮我找出错误。

0 投票
1 回答
1128 浏览

android - 如何验证在微调器中输入的文本?

在我的应用程序中,我为信用卡验证创建了一个单独的类。我将信用卡验证类称为主要活动中的一种方法,并且在我的主要活动中,我在微调器列表中列出了卡名称。对于卡号验证,我使用了 LUHN 算法并且工作正常。问题是,如果我从微调器中选择主卡并且如果我在编辑文本中输入签证卡号并在执行后显示有效的签证卡。但它是错误的,因为在微调器列表中它显示主卡。如何验证微调器?请帮我。

0 投票
9 回答
31112 浏览

python - 卢恩公式的实现

我试图在 Python中实现Luhn 公式。这是我的代码:

但它不能正常工作:

等等...

但是代码的逻辑对我来说似乎没问题。我遵循了这个工作流程:

卢恩公式

  1. 删除数字的最后一位数字。最后一位数字是我们要检查的反转数字

  2. 将奇数位(1、3、5 等)的数字乘以 2,然后将所有大于 9 的结果减去 9

  3. 将所有数字加在一起

  4. 校验位(卡的最后一个数字)是您需要添加以获得 10 的倍数(模 10)的金额

0 投票
3 回答
375 浏览

c - 使用字符串数组调用整数的 1、10、100... 列

我正在尝试将 long long 整数转换为字符串数组,其中 1 的列位于数组的位置 0,10 的列位于位置 1,100 的列位于位置 2,如下所示:

输入:4444555566667777 -----> 输出:[4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7]

为了测试我的代码,我写了最后一行printf("%d\n",number_str[3])。我希望我的程序输出位置 4 的值“7”。相反,它输出“52”。正如我所料,将我的最后一行更改为printf("%d\n",number_str[4])“53”而不是“6”。谁能解释发生了什么?

当然 52 和 53 对应于 ASCII 值,但是,我怎样才能将它们转换为整数呢?我可以排队吗?

在我的程序的这一部分中,我的目标是将 10、1,000、100,000、10,000,000... 列中的所有数字相加。以 10 为基数的信用卡号中的每隔一个数字。这是我尝试进行 Luhn 验证的一步。

0 投票
9 回答
33739 浏览

c# - 使用 c# 实现 luhn 算法

我正在使用以下代码以 C# 语言实现用于信用卡检查的 Luhn 算法,但无法获得输出以生成校验和其显示有效性:请帮助我。提前致谢