0
public class CreditCardNumber {
private String issuerID = "000000";
private String accountNum = "999999999";
private int checkDigit = 0;

public CreditCardNumber(String TempissuerID, String TempaccountNum) {
    if (TempissuerID != null && TempaccountNum != null
            && TempissuerID.length() == 6 && TempaccountNum.length() == 9)
        if (Digits(TempissuerID) && Digits(TempaccountNum)) {
            issuerID = TempissuerID;
            accountNum = TempaccountNum;
            calcCheckDigits();
        }
}

public boolean Digits(String temp1) {
    String temp = "0123456789";
    int count = 0;
    for (int i = 0; i < temp1.length(); i++)
        for (int j = 0; j < temp.length(); j++)
            if (temp1.charAt(i) == temp.charAt(j)) {
                count++;

            }
    if (count == temp1.length()) {
        return true;
    }
    return false;
}

public CreditCardNumber() {
}

public String getID() {
    return issuerID;
}

public String getAccNum() {
    return accountNum;
}

public int getDigits() {
    return checkDigit;
}

private void calcCheckDigits() {
    int sum;
    sum = checkSum();
    if ((sum + checkDigit) % 10 != 0) {
        checkDigit = sum - (sum % 10);
    }
    System.out.printf("%d", checkDigit);
}

public void CreateCred(String TempissuerID) {
    if (TempissuerID != null && TempissuerID.length() == 6
            && Digits(TempissuerID)) {
        issuerID = TempissuerID;
    } else {
        issuerID = "000000";
    }
    StringBuilder TempString = new StringBuilder();
    for (int i = 0; i < 9; i++) {
        TempString = TempString.append((Math.random() * (9 - 0 + 1) + 0));
    }
    accountNum = TempString.toString();
    calcCheckDigits();
}

private int checkSum() {
    StringBuilder temp = new StringBuilder();
    int num;
    int sum = 0;
      for(int i = 0 ; i <issuerID.length();i++)
         {
                 temp = temp.append(issuerID.charAt(i));
         }
                 for(int j = 0 ; j < accountNum.length(); j++)
                 {            
                     temp = temp.append(accountNum.charAt(j));
                 }

    System.out.println(temp);
    for (int k = 0; k < temp.length(); k += 2) {
        num = temp.charAt(k) - '0';
        num *= 2;
        if (num > 9)
            num = 1 + (num % 10);
        temp.setCharAt(k, (char) num);
    }
    for (int v = 0; v < temp.length(); v++) {
        sum += temp.charAt(v) - '0';
    }
    System.out.printf("%d", sum);
    return sum;
}

public String toString() {
    String s = "";
        String str = issuerID + accountNum;

        return str;
    }
}

我的校验和方法有问题,我写了一些 printf 语句来检查 sum 的值,结果是 -930 但这不是 sum 的值,如果只添加没有理由有一个负号。当我为 issuerID 输入 321321 和为 accountNum 输入 654654654 时,我希望 checkDigit 编号为 9,并且校验和中的 sum 值将传递给 calCheckDigits 方法以获取 CheckDigit 的值为 9。

我在这种方法中做错了什么?

好的,我现在只编辑代码,总和得到 -30

我只是再次编辑校验和中的前 2 个 for 循环错误,导致我的临时字符串值不正确

现在它得到 -320 仍然不正确但越来越好

4

0 回答 0