1

したがって、これは割り当てです:

クレジットカード番号 8桁の数字で確認 • 右端の桁から1桁おきに合計してください。たとえば、クレジット カード番号が 4358 9795 の場合、合計は 5 + 7 + 8 + 3 = 23 になります。 • 前の手順で含めなかった各数字を 2 倍にします。結果の数字のすべての桁を追加します。たとえば、上記の数値の場合、最後から 2 番目の桁から 2 倍すると、18 18 10 8 になります。これらの値のすべての桁を足すと、1 + 8 + 1 + 8 + 1 + 0 + になります。 8 = 27。 • 前の 2 つのステップの合計を加算します。結果の最後の桁が 0 の場合、数値は有効です。私たちの場合、23 + 27 = 50 なので、数値は有効です。--有効/無効?

テスター プログラムと、メソッド用の別のプログラムを作成しました。すべてが正常にコンパイルされたため、技術的なエラーは発生しないはずですが、有効なカード番号を入力しても、プログラムは番号が無効であると返すため、実際のアルゴリズムに問題があると想定していますが、私はかなり初心者ですこれだから何だか分からない。

import java.util.Scanner;

public class CreditCardTester{

public static void main(String[] args){

    Scanner scanner = new Scanner(System.in);
    String retry = ("y");
    String n = null;

    while(retry.equalsIgnoreCase("y")){ // allows program to keep running even if the user enters in a capital Y
        int lengthCheck = 1;
        System.out.println("Please enter your 8-digit credit card number");

    // check to see whether the input number is exactly 8 digits
        while(lengthCheck==1){
            n = scanner.next();
                if(n.length()==8)
                    lengthCheck=0;
                else
                    System.out.println("Please make sure the credit card number you have entered is 8 digits");
        } // end inner while loop

    // instantiate CardNumber and check validity
    CardNumber number = new CardNumber(n);
    number.check();
    if (number.isValid())
        System.out.println("The number you entered is a valid credit card number.");
    else
        System.out.println("The number you entered is not a valid credit card number. Would you like to enter in another number? (y/n)");
    retry = scanner.next();

    } // end outer while loop

}

}

そして別クラス

public class CardNumber {

private String number;
private boolean valid;

public CardNumber(String n){
    number = n;
    valid = true;
}

private void check1(){
    int a = Integer.parseInt(number.substring(7));
    int b = Integer.parseInt(number.substring(5,6));
    int c = Integer.parseInt(number.substring(3,4));
    int d = Integer.parseInt(number.substring(1,2));

    int oddsum = a + b + c + d;

    int e = (Integer.parseInt(number.substring(6,7))) * 2;
    int f = (Integer.parseInt(number.substring(4,5))) * 2;
    int g = (Integer.parseInt(number.substring(2,3))) * 2;
    int h = (Integer.parseInt(number.substring(0,1))) * 2;

    String ee = String.valueOf(e);
    String ff = String.valueOf(f);
    String gg = String.valueOf(g);
    String hh = String.valueOf(h);

    int evensum = (Integer.parseInt(ee.substring(0))) + (Integer.parseInt(ff.substring(0))) + (Integer.parseInt(gg.substring(0))) + (Integer.parseInt(hh.substring(0)));

    int totalsum = evensum + oddsum;
    if (!(totalsum%10 == 0))
    valid=false;
}

public void check(){
    check1();
}

public boolean isValid(){
    return valid;
}

}

これを行うにはもっと良い方法もあると確信しているので、すべての提案を歓迎します!

4

3 に答える 3

1

クレジット カード番号の検証は、Luhn アルゴリズムと呼ばれます。これはJavaの実装です http://www.xinotes.org/notes/note/595/

あなたのコードについて、私はここで考えます:

 int evensum = (Integer.parseInt(ee.substring(0))) + (Integer.parseInt(ff.substring(0))) + (Integer.parseInt(gg.substring(0))) + (Integer.parseInt(hh.substring(0)));

あなたは両方の数字を合計することを意味します:

int evensum = Integer.parseInt(ee.substring(0,1)) +  Integer.parseInt(ee.substring(1)) ... 
于 2012-10-05T01:12:02.063 に答える
0

これを試して。

public class CardNumber {

    String number;
    boolean valid;

    public CardNumber(String n){
        number = n;
    }

    public void check(){
        // The odd sum
        // For the eight digits, 1, 3, 5, 7 are odd
        int a = Integer.parseInt("" + number.charAt(1));
        int b = Integer.parseInt("" + number.charAt(3));
        int c = Integer.parseInt("" + number.charAt(5));
        int d = Integer.parseInt("" + number.charAt(7));

        int oddsum = a+b+c+d;

        // The even sum
        int e = (Integer.parseInt(number.substring(6,7))) * 2;
        int f = (Integer.parseInt(number.substring(4,5))) * 2;
        int g = (Integer.parseInt(number.substring(2,3))) * 2;
        int h = (Integer.parseInt(number.substring(0,1))) * 2;

        // As suggested by RUP to make it more simple
        int evensum = e + f + g + h;

        // Total sum
        int totalsum = oddsum + evensum;
        valid = (totalsum%10==0)?true:false;            
    }

    public boolean isValid(){
        return valid;
    }

}
于 2012-10-05T01:28:37.203 に答える