检查信用卡号码的验证

时间:2015-07-04 02:21:47

标签: validation netbeans checksum

我在Java类的简介中,我在编写信用卡验证程序的校验和算法时遇到了麻烦。要求是:

  • 从右边的第二个数字开始,从右到左,每隔一个数字加倍;如果结果数大于或等于10,则减去9.将每个结果数加在一起。
  • 然后,从右边的最后一位开始,从右到左,将每隔一位数字添加到上一步中使用的运行总计。
  • 如果结果总数可被10整除,则信用卡号有效。
  • 编码此算法时,请记住并非所有信用卡号都具有相同的位数。

还指出我们需要使用循环来完成此操作。我知道我可能需要一个for循环,但我只是坚持如何完成它。这就是我所拥有的:

public static boolean isValidNumber(String cardNumber) {
        //your code here
        int i, checkSum = 0;

        // Compute checksum of every other digit starting from right-most digit
        for (i = cardNumber.Length - 1; i >= 0; i -= 2) {
            checkSum += (cardNumber[i] - '0');
        }

      // Now take digits not included in first checksum, multiple by two,
        // and compute checksum of resulting digits
        for (i = cardNumber.Length - 2; i >= 0; i -= 2) {
            int val = ((cardNumber[i] - '0') * 2);
            while (val > 0) {
                checkSum += (val % 10);
                val /= 10;
            }
        }

        // Number is valid if sum of both checksums MOD 10 equals 0
        return ((checkSum % 10) == 0);
    }

我在两个for循环中都遇到错误。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

  • 要查找字符串的长度,请使用string.length()而不是string.Length
  • 要从给定索引处的字符串中获取char,请使用string.charAt(index)

    public static boolean isValidNumber(String cardNumber) {
    //your code here
    int i, checkSum = 0;
    
    //To find the length of the string use string.length() not string.Length
    for (i = cardNumber.length() - 1; i >= 0; i -= 2) {
        //to get char from a string at a given position use string.charAt(index)
        checkSum += (cardNumber.charAt(i) - '0');
    }
    
    for (i = cardNumber.length() - 2; i >= 0; i -= 2) {
        int val = ((cardNumber.charAt(i) - '0') * 2);
        while (val > 0) {
            checkSum += (val % 10);
            val /= 10;
        }
    }
    
    // Number is valid if sum of both checksums MOD 10 equals 0
    return ((checkSum % 10) == 0);
    }