1

私はクレジットカード検証プログラムを書いています。積が 1 桁を超える長さ (つまり、10) であるかどうかを確認しようとしています。2 つの整数を加算する必要がある場合。たとえば、10 は1 + 0となり、これは 1 に等しくなります。これを行うにはどうすればよいですか?

これは私がこれまでに持っているものです:

public class CreditCard{
public static void main(String args[]){

    //Take in a 16 digit credit card number
    Scanner in=new Scanner (System.in);
    int num[]=new int[16];
    int i=0;


    for (i=0;i<num.length;i++) {
        System.out.println("Please enter a 16 digit credit card number");
        num[i]=in.nextInt();

    }
    if (num.length < 16 || num.length > 16)
        {
            System.out.println("Invalid");
        }
     else
    {

        //multiply every other number by 2, starting with place 16, and find the sum(sum1)
         int num1 = (num[16] * 2);
         int num2 = (num[14] * 2);
         int num3 = (num[12] * 2);
         int num4 = (num[10] * 2);
         int num5 = (num[8] * 2);
         int num6 = (num[6] * 2);
         int num7 = (num[4] * 2);
         int num8 = (num[2] * 2);

         if( num1 > 9)

         int sum1 = (num[16] * 2) + (num[14] * 2) + (num[12] * 2) + (num[10] * 2) + (num[8] * 2) + (num[6] * 2) + (num[4] *2) + (num[2] *2);
         int sum2 = (num[15] + num[13] + num[11] + num[9] + num[7] + num[5] + num[3] + num[1]);

        int totalSum = sum1 + sum2;
        if (totalSum % 10 != 0)
        {
            System.out.println("Invalid card number!!");
        }
        else

        {  
            System.out.println(" Valid Credit Card Number!!");


        }

      }      
}
}
4

6 に答える 6

2

車輪を再発明するのではなく、クレジット カード番号の検証に広く使用されているチェックサム アルゴリズムであるLuhn アルゴリズムを調べることができます。ここにJavaバージョンがあります。

于 2012-12-13T23:23:58.740 に答える
1

Luhn チェックディジット アルゴリズムを実装しようとしているようです。

Apache commons-validator ライブラリの apache commonsLuhnCheckDigit()ユーティリティ メソッドを試してください。

于 2012-12-13T23:25:29.563 に答える
0

最初に整数を数字に分割することを検討することをお勧めします: int 値を別々の数字に分割します

于 2012-12-13T23:21:26.237 に答える
0

Blender のコメントが正しければ、次のようにできます。

int num=123; // or whatever
String str=Integer.toString(num);
int total=0;
if(str.length()>1){
    for(int i=0; i<str.length(); i++){
        total+=Integer.parseInt(str.charAt(i));
    }
}
System.out.println(total);

(実行していないので、エラーが発生している可能性があります)

于 2012-12-13T23:23:05.300 に答える
0

簡単な方法は次のようになると思います

if (num1 > 9) num1 = num1-9

これは、元の数値が 2 を掛けた後にどのように見えるかを見るとうまくいきます。

num  num*2  result
0    0      0
1    2      2
2    4      4
3    6      6
4    8      8
5    10     1
6    12     3
7    14     5
8    16     7
9    18     9
于 2012-12-13T23:27:05.163 に答える
0

合計を計算するコードは次のようにする必要があると思います

int totalSum = 0;
for (i=0; i<num.length; i+=2) {
    totalSum+=num[i+1];
    if (num[i+2]>4) {
        totalSum+=1+((num[i+2]*2) % 10); 
    } else {
        totalSum+=num[i+2]*2;
    }
}

これにより、文字列変換が遅くなるのを防ぐことができます。

于 2012-12-13T23:39:21.370 に答える