我必须创建一个使用Luhn算法检查信用卡是否有效的程序。
算法是:
形成每个其他数字的总和,包括最右边的数字;所以 5490123456789128总和为8 + 1 + 8 + 6 + 4 + 2 + 0 + 4 = 33 每个剩余数字形成两倍,然后将创建它的所有数字相加;我们示例中的其余数字(5 9 1 3 5 7 9 2)加倍到10 18 2 6 10 14 18 4,其总和为1 + 0 + 1 + 8 + 2 + 6 + 1 + 0 + 1 + 4 + 1 + 8 + 4 = 37 加上上面两个总和(33 + 37 = 70) 如果结果是10的倍数(即,它的最后一位数是0)那么它就是一个有效的信用卡号。
我制作了扫描仪,并将信用卡号码保存到字符串卡号中 然后我创建了一个while循环,将从右边开始的每个其他字符保存到一个字符串中。所以现在,从右边开始,我的信用卡号码的每个其他数字都填充了一个字符串。但是,我需要将该字符串中的所有数字相加,这是我无法弄清楚的。
例如,如果用户输入1234作为卡号,则字符串everyotherdigit = 42.如何在字符串中添加4和2?
答案 0 :(得分:0)
有很多方法可以做到这一点。你可以通过谷歌搜索来找到自己的解决方案。
无论如何,这是你可以做的:
从字符串中获取单个字符,并将它们转换为int。
String cardNumber = "5490123456789128";
int value = cardNumber.charAt(0) - '0';
使用for循环并将0
更改为x
(循环计数器)将解决所有问题。
获取单个字符串并转换为int。
String cardNumber = "5490123456789128";
int value = Integer.parseInt(cardNumber.substring(0,1));
答案 1 :(得分:0)
所以这样的事情对你有用:
public static void main(String[] args)
{
String cardNum = "5490123456789128";
String others = null;
int evenDigitSum = 0;
int oddDigitTransformSum = 0;
for (int pos = 0; pos < cardNum.length(); pos++)
{
if ((pos%2) != 0)
{
evenDigitSum += (cardNum.charAt(pos) - '0');
}
else
{
others = Integer.toString((cardNum.charAt(pos)-'0')*2);
for (char c : others.toCharArray())
{
oddDigitTransformSum += (c-'0');
}
}
}
System.out.println("Odds: " + oddDigitTransformSum);
System.out.println("Evens: " + evenDigitSum);
System.out.println("Total: " + (evenDigitSum+oddDigitTransformSum));
System.out.println("Valid Card: " + ((evenDigitSum+oddDigitTransformSum)%10==0));
}
答案 2 :(得分:0)
我会将字符串视为char
的数组,并使用Character.digit(int, int)
将每个字符转换为相应的int
:
public static boolean isValidCreditCard (String s);
char[] arr = s.toCharArray();
int everyOtherSum = 0;
for (int i = arr.length - 1; i >= 0; i -= 2) {
everyOtherSum += Character.digit(arr[i], 10);
}
int doubleSum = 0;
for (for (int i = arr.length - 2; i >= 0; i -= 2) {
int currDigit = Character.digit(arr[i], 10);
int doubleDigit = currDigit * 2;
while (doubleDigit > 0) {
doubleSum += (doubleDigit % 10);
doubleDigit /= 10;
}
}
int total = everyOtherSum + doubleSum;
return total % 10 == 0;
}
答案 3 :(得分:0)
public int cardCount(String numbers){
Stack<Integer> stack = new Stack<>();
int count = 0;
for(char c : numbers.toCharArray()){
stack.push(Character.getNumericValue(c));
}
int size = stack.size();
for(int i=1;i <= size; i++){
if(i%2 != 0){
count = count + stack.pop();
}else{
stack.pop();
}
}
return count;
}
这只是你所要求的,而不是整个算法