用C#实现卢恩算法
我正在使用以下代码来实现public class Program { private static void Main(string[]creditcard) { int sum = 0, d; string num ="7992739871"; int a = 0; for (int i = num.Length - 2; i >= 0; i--) { d = Convert.ToInt32(num.Substring(i, 1)); if (a % 2 == 0) d = d * 2; if (d > 9) d -= 9; sum += d; a++; } if ((10 - (sum % 10) == Convert.ToInt32(num.Substring(num.Length - 1)))) Console.WriteLine("valid"); Console.WriteLine("sum of digits of the number" + sum); } } 解决
14 2024-04-11
编程技术问答社区
卢恩算法的for循环中的未知值
我有这个代码,由于某些原因,我在for循环的每一个迭代中都会得到很多数量,而我无法弄清楚逻辑. #include #include #include #include int main(void) { long CARD, digits, digit, odd, sum; // prompting the user for a positive card number and checking the length do { CARD = get_long("Please insert your card number: "); digits = floor(log10(labs(CARD)) + 1); } while (digits 16); // Getting every other
22 2024-04-10
编程技术问答社区
如何在C语言中添加产品数字而不是产品本身?
我正在尝试完成CS50课程的C中的任务,在该课程中,我必须实现卢恩的算法来验证信用卡号.这是一个详细说明的快速示例: 信用卡号:4003600000000014. 现在,对于其他数字,从数字的二次数字开始: 1-0-0-0-0-6-0-4 让我们将每个数字乘以2: 1•2 + 0•2 + 0•2 + 0•2 + 0•2 + 6•2 + 0•2 + 4•2 给我们: 2 + 0 + 0 + 0 + 0 + 0 + 12 + 0 + 8 现在,让我们一起添加这些产品的数字(即,不是产品本身): 2 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 0 + 8 = 13 现在,让我们将该总和(13)添加到未乘以2的数字的总和中(从末端开始): 13 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 3 + 0 = 20 是的,该总和(20)中的最后一个数字为0,因此数字有效. 我想出了
12 2024-04-08
编程技术问答社区
卢恩算法的逻辑
我目前正在经历Codecademy的完整堆栈工程师课程,直到现在,我一直都很满意,发现新事物,独自解决问题,但这是我的进步中的一个严重障碍,因为我可以' T似乎可以确定此逻辑的问题.我并不是要质疑卢恩的算法,但是认真地说,我需要对此进行一些澄清... 所以我的问题是,该算法正在返回我所有的数组,如有效,我的代码在下面(Codecademy提供的数组): // All valid credit card numbers const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]; const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9]; const valid3 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6]; const valid4 = [6, 0, 1, 1, 1, 4, 4, 3, 4
10 2024-03-05
编程技术问答社区
使用卢恩算法检查信用卡的有效性
我试图使用luhn算法检查信用卡的验证,该算法可作为以下步骤: 每秒从右到左每秒加倍.如果数字加倍会导致两个数字,请添加两个数字以获取单位数字. 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 现在添加步骤1的所有单位数字. 4 + 4 + 8 + 2 + 3 + 3 + 1 + 7 + 8 = 37 在卡号中从右到左的奇数位置添加所有数字. 6 + 6 + 0 + 8 + 0 + 7 + 7 + 8 + 3 = 38 总结步骤2和步骤3的结果. 37 + 38 = 75 如果步骤4的结果可除以10,则卡号是有效的;否则,这是无效的.例如,编号4388576018402626无效,但数字4388576018410
30 2024-03-04
编程技术问答社区
生成卢恩校验和
有很多用于验证Luhn校验和生成的实现.我遇到这个了解增量变量背后的逻辑. 我已经制作了据说应该生成luhn校验和的功能,但是由于某种原因,我尚未理解生成的校验和是无效的一半时间. function Luhn($number, $iterations = 1) { while ($iterations-- >= 1) { $stack = 0; $parity = strlen($number) % 2; $number = str_split($number, 1); foreach ($number as $key => $value) { if ($key % 2 == $parity) { $value *= 2; if ($value > 9)
40 2024-01-22
编程技术问答社区
我如何实现卢恩算法?
我正在尝试创建一个基于鲁恩算法验证10到12位长数序列的程序,但是我的程序一直告诉我,即使不是它们,每个数字也不是无效的. 这个数字应该有效,但我的代码不这么认为:8112189876 这个数字不应有效,我的程序认为每个数字都不是无效的:8112189875 这是我的代码: static void luhn(){ System.out.print("Enter number to validate:\n"); String pnr = input.nextLine(); int length = pnr.length(); int sum = 0; for (int i = 1, pos = length - 1; i
20 2024-01-22
编程技术问答社区
卢恩算法的实现
我正在尝试实施简单的信用卡号码验证.我读到了有关luhn算法 从支票数字计数,这是最右边的,然后移动 左,将每秒数字的值翻倍. 总和产品的数字(例如10:1 + 0 = 1,14:1 + 4 = 5) 以及原始数字的未加倍数字. 如果总Modulo 10等于0(如果总末端为零) 然后,该数字根据Luhn公式有效;否则是 无效. 在Wikipedia上,非常容易理解Luhn算法的描述.但是,我还看到了Luhn Algorithm rosetta code 这些实现效果很好,但是我对为什么他们可以使用阵列来完成工作感到困惑.他们使用的阵列似乎与鲁恩算法没有关系,我看不到它们如何实现Wikipedia上描述的步骤. 他们为什么使用数组?它们的意义是什么?如何用Wikipedia所述实施算法? 解决方案 数组[0,1,2,3,4,-4,-3,-2,-1,0]被用作查找数组,以查找0-9中数字和其值2倍的数字之间的差.例如,对于数字8,8和(2*8)= 16-> 1+6
26 2024-01-22
编程技术问答社区
Python信用卡验证
我是初学者Python学习者,目前我正在研究Luhn算法以检查信用卡验证.我写了大部分代码,但是我遇到了两个错误,我得到的第一个是一个错误,在分配之前被引用了.我得到的第二个是类型" _io.textiowrapper"的对象,没有len().进一步的帮助/指导将不胜感激. 这些是Luhn算法(MOD10 CHECK) 的步骤 每秒从右到左每秒加倍.如果此"加倍"导致两位数的数字,请添加两位数 获得一个数字的号码. 现在添加步骤1的所有单位数字. 在信用卡号中从右到左的奇数位置添加所有数字. 总结步骤2和3的结果. 如果步骤4的结果可除以10,则卡号是有效的;否则,它是无效的. 这是我的输出应该是 Card Number Valid / Invalid -------------------------------------- 3710293 Invalid 5190990281925290 Invalid 3
26 2023-11-13
编程技术问答社区
信用卡的客户端验证
是否有人有库或JavaScript片段来验证用户命中之前的信用卡支票数字? 解决方案 还有其他特定脚本: javascript信用卡验证功能 大多数使用 luhn algorithm . 其他解决方案 可能甚至不再遵循此线程,但这可能对他人有帮助: http://jquerycreditcardvalidator.com 它检查卡类型,验证其长度并使用Luhn算法检查Mod 10. 其他解决方案 您可以使用此片段使用 luhn algorithm function validateCardNumber(number) { var regex = new RegExp("^[0-9]{16}$"); if (!regex.test(number)) return false; return luhnCheck(number); } function luhnCheck(val) { var
62 2023-11-12
编程技术问答社区
用 python 生成 IMEI
您好,我正在尝试在Python中制作一个函数以生成有效的IMEI编号,所以这是我的函数.IMEI验证使用Luhn算法,因此我正在尝试在脚本中实现它. def getImei(): num = '' suma = 0 for i in range(0,13): digit = random.randrange(0,9) suma = suma + digit num = num + str(digit) suma = suma * 9 digit = suma % 10 num = num + str(digit) return num 但是,该功能无法生成有效的IMEI编号.我在维基百科上找到了一篇文章,告诉我如何生成支票数字( http://en.wikipedia.org/wiki/luhn_algorithm ) 通过计算数字之和计算该值Modulo 10(以方
70 2023-07-21
编程技术问答社区
卢恩公式的实施
我试图在Python中实现 luhn formula 在Python中. 这是我的代码: import sys def luhn_check(number): if number.isdigit(): last_digit = int(str(number)[-1]) reverse_sequence = list(int(d) for d in str(int(number[-2::-1]))) for i in range(0, len(reverse_sequence), 2): reverse_sequence[i] *= 2 for i in range(len(reverse_sequence)): if reverse_sequence[i] > 9: reverse_sequence[i] -= 9
60 2023-06-24
编程技术问答社区
PL/SQL校验码,luhn使用MOD 11
所以这是一个问题: 写代码以获取ID并确定支票数字是否正确 更新的代码: Set SERVEROUTPUT ON DECLARE val_num NUMBER := '&user_input'; holder NUMBER := 0; y NUMBER := 0; conv_string VARCHAR2(20); BEGIN conv_string := to_char(val_num*10); for x in 1..length(conv_string) loop y := to_number(substr(conv_string, -x, 1)); if mod(x,2) = 0 then y := y * 2; if y > 9 then y := y - 9; end if;
34 2023-06-08
编程技术问答社区
信用卡号码验证器不能正常工作
def checksum(card_without_check): card_without_check = card_without_check[-1::-1] def numbers(string): return [int(x) for x in string] print(card_without_check) odd_numbers = numbers(card_without_check[0::2]) even_numbers = numbers(card_without_check[1::2]) odd_numbers = [x * 2 for x in odd_numbers] odd_numbers = [x - 9 if x > 9 else x for x in odd_numbers] print(even_numbers) print(odd_numbers) re
54 2023-03-10
编程技术问答社区
JavaScript卡平移检查数字Luhn验证
我已经使用了下面的链接中的代码来尝试验证信用卡,但是当我在现场提交错误的数据时,我不会收到警报. 在执行luhn check 之前, 我的形式如下: Select credit card: American Express Carte Blanche Diners Club Discover enRoute
34 2023-01-22
编程技术问答社区
根据卡号识别卡片类型
我有一系列的卡类型,看起来像 var cards = new Array(); cards [0] = {name: "VISA", length: "13,16", prefixes: "4", checkdigit: true}; cards [1] = {name: "VISA_DELTA/ELECTRON", length: "16", prefixes: "417500,4917,4913", checkdigit: true}; 但是,ID希望能够根据输入的卡号找到卡类型.例如,如果他们从下拉列表(即签证)中选择其卡类型,那么信用卡号应以4开始类型).任何帮助将不胜感激. 卡号文本字段的ID是CardNumber.我不确定可能需要哪些其他信息,我有一个称为验证的函数,该函数验证其余表单和函数调用计算luhn检查的功能. 解决方案 我相信您可能正在寻找这样的东西: funct
36 2023-01-14
编程技术问答社区
是否有任何有效的信用卡号码是其他有效信用卡号码的初始子串?
我正在尝试实施对有效信用卡号码的识别,以便我可以过渡到下一个字段.鉴于信用卡号有各种篇幅,我的问题是我是否可以指望我确认有效的信用卡号(通过Regex和Luhn Algorithm使用),我不会排除其他有效的信用卡号码(就正则/鲁恩和发行而言)长度更大. 解决方案 考虑有效的锅长度为16到19位的签证,因为最后一个数字是上一位数字的检查数字,总会有另一个带有额外数字的锅,可以通过luhn测试. 4929847243031832 49298472430318328 492984724303183283 其他解决方案 我不确定使用Regex是否是检查信用卡有效性的有效方法. lengength = 16几乎是绝对是绝对的.他们的图书馆 其他解决方案 有效的信用卡号(PAN-主帐号)有11至24位数字,不同的系统具有自己的长度,加上LRC(纵向冗余检查). 如果是签证或万事达卡的18个符号,则123456789123456789将有效. https://en.wik
58 2022-08-22
编程技术问答社区
使用Luhn算法验证信用卡号码
我对以下编程分配有一个问题. 信用卡号遵循某些模式.信用卡必须有13到16位.它必须从: •4签证 •5用于主卡 •37用于美国运通卡 1954年,IBM的Hans Luhn提出了一种验证信用卡号码的算法.该算法可用于确定是否正确输入了卡号或者扫描仪是否正确扫描了信用卡.几乎所有信用卡号码在此有效性检查后生成,通常知道作为LUHN检查或模数10检查,可以如下所述.有关插图,请考虑卡号4388576018402625. 从右到左上的每秒每秒两倍.如果在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的所有单位数字 4 + 4 +8 + 2 + 3 + 1 +
1060 2022-07-19
编程技术问答社区
Haskell中的Luhn算法
我想我已经在 Haskell 中正确计算了 Luhn 算法: f1 :: Integer -> [Integer] f1 x = if x [Integer] f2 xs = [(!!) xs (x - 1) | x [Integer] f3 xs = if mod (length xs) 2 /= 0 then (f2 xs) else (f2 (0:xs)) f4 :: [Integer] -> [Integer] f4 xs = map (*2) (f3 xs) f5 :: [Integer] -> [[Integer]] f5 xs = map f1 xs f6 :: [[Integer]] -> [Integer] f6 [] = [] f
2092 2022-07-17
编程技术问答社区