【发布时间】:2012-08-14 19:54:03
【问题描述】:
- 第 1 步:从右数第二位开始,将卡号交替数字的值加倍。
- 第 2 步:将第 1 步中获得的单个数字与原始数字中的每个未受影响的数字相加。
- 第三步:如果第二步得到的总数能被10整除,则卡号有效,否则无效。
例如使用 Mod 10 算法验证 VISA 卡 49977393716 的卡号:
第 1 步:
4 9 9 7 7 3 9 3 7 1 6
x2 x2 x2 x2 x2
= 18 14 6 6 2
第二步:4 + (1+8) + 9 + (1+4) + 7 + (6) + 9 + (6) + 7 + (2) + 6 = 70
第三步:70能被10整除⇒卡号有效
这是问题的第二部分。所以我将卡号用户输入作为字符串。这是否意味着我必须 charAt(),需要的字符//替代值。
int[] digits = new int[cardNo.length()/2];//Number of alternate values available
char digit1;
char digit2;
int intDigit1;
int intDigit2;
int[] sumOfTwoDigits = new int[cardNo.length()/2];
int totalSum;
String digitsChar;
for(int i=0; i<digits.length; i++){
digits[i]=(cardNo.charAt(i+1))*2;
digitsChar=Integer.toString(digits[i]);
digit1= digitsChar.charAt(1);
digit2= digitsChar.charAt(2);
intDigit1= Character.getNumericValue(digit1);//Convert char to int to perform addition
intDigit2= Character.getNumericValue(digit2);//Convert char to int to perform addition
sumOfTwoDigits[i] = intDigit1+intDigit2;
System.out.println("digits: " + intDigit1);
}
【问题讨论】:
-
它们运行但逻辑中的某个地方是错误的。我每次迭代都得到 0
-
这是什么语言? @leppie 这不是 javascript。
-
@some: 糟糕,没有注意到
System.out.println;p 所以java! -
哦,我不知道这是算法,所以
00000000000是一个有效的CC号码? -
@dualed 从技术上讲,00000000000 是有效的,因为它具有正确的校验和。但是,如果它被排除在标准的某个地方,我不会感到惊讶。它通常用于表示没有输入数字。因此,永远不会有一个帐户附加到该卡号。请记住,Luhn 算法的目的是检测数字是否输入错误。要验证卡是否有效,您必须在线与发卡机构核实。
标签: java validation credit-card