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;
    }
}

チェックサム メソッドに問題があります。sum の値をチェックするためにいくつかの printf ステートメントを書きましたが、これは -930 であることが判明しましたが、追加するだけの理由がない場合、これは合計値が想定するものではありません。 issuerID に 321321 を入力し、accountNum に 654654654 を入力すると、checkDigit 番号が 9 になると予想されます。チェック サムの合計の値が calCheckDigits メソッドに渡され、CheckDigit の値である 9 が取得されます。

この方法で何が間違っていますか?

わかりましたコードを編集しただけで、合計が-30になります

チェックサムの最初の2つのforループが間違っていたため、一時文字列の値が正しくないため、もう一度編集します

今は -320 になりますが、まだ正しくありませんが、改善されています

4

0 に答える 0