2017-06-29 13 views
1

私はクレジットカード検証ツールを使っていますが、最初の数値で入力したクレジットカードの種類を識別するコードも実装したいと考えています。 文字列を最初の数値で識別するにはどうすればよいですか?最初の数値で文字列を識別する方法


import java.util.Scanner; 

public class parking_garage { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 



       // Prompt the user to enter a credit card cardnumber as a long integer 
       System.out.print("Enter a credit card cardnumber as a long integer: "); 
       long cardnumber = input.nextLong(); 

       System.out.println(
        cardnumber + " is " + (isValid(cardnumber) ? "valid" : "invalid")); 
    } 



      /** Return true if the card cardnumber is valid */ 
      public static boolean isValid(long cardnumber) { 
       boolean valid = 
        (getSize(cardnumber) >= 13 && getSize(cardnumber) <= 16) && 
        (prefixMatched(cardnumber, 4) || prefixMatched(cardnumber, 5) || 
        prefixMatched(cardnumber, 37) || prefixMatched(cardnumber, 6)) && 
        ((sumOfDoubleEvenPlace(cardnumber) + sumOfOddPlace(cardnumber)) % 10 == 0); 

       return valid; 
      } 

      /** Get the result from Step 2 */ 
      public static int sumOfDoubleEvenPlace(long cardnumber) { 
       int sum = 0; 
       String num = cardnumber + ""; 
       for (int i = getSize(cardnumber) - 2; i >= 0; i -= 2) { 
        sum += getDigit(Integer.parseInt(num.charAt(i) + "") * 2); 
       } 
       return sum; 
      } 

      /** Return this cardnumber if it is a single digit, otherwise, 
      * return the sum of the two digits */ 
      public static int getDigit(int cardnumber) { 
       if (cardnumber < 9) 
        return cardnumber; 
       else 
        return cardnumber/10 + cardnumber % 10; 
      } 

      /** Return sum of odd-place digits in cardnumber */ 
      public static int sumOfOddPlace(long cardnumber) { 
       int sum = 0; 
       String num = cardnumber + ""; 
       for (int i = getSize(cardnumber) - 1; i >= 0; i -= 2) { 
        sum += Integer.parseInt(num.charAt(i) + ""); 
       } 
       return sum; 
      } 

      /** Return true if the digit d is a prefix for cardnumber */ 
      public static boolean prefixMatched(long cardnumber, int d) { 
       return getPrefix(cardnumber, getSize(d)) == d; 
      } 

      /** Return the cardnumber of digits in d */ 
      public static int getSize(long d) { 
       String num = d + ""; 
       return num.length(); } 

      /** Return the first k cardnumber of digits from cardnumber. If the 
      * cardnumber of digits in cardnumber is less than k, return cardnumber. */ 
      public static long getPrefix(long cardnumber, int k) { 
       if (getSize(cardnumber) > k) { 
        String num = cardnumber + ""; 
        return Long.parseLong(num.substring(0, k)); 
       } 
       return cardnumber; 
      } 
+0

「long」を使用して番号を保存するとわかりませんが、0から始まるCCの場合は番号から削除されるだけで問題が発生する可能性があります。 – luizfzs

+0

"_クレジットカード番号を長整数として入力してください:_" - ちょっとだけ少数の駐車場とクレジットカード利用者が、何倍の整数であるか知っています。そして知っている人は次のように質問します:どのプロセッサアーキテクチャおよび/または言語ですか? ;) –

+0

「最初の数値で文字列を識別するにはどうすればよいですか?文字列の最初の文字を取得する方法を尋ねていますか? – bradimus

答えて

0

あなたは、文字列のすべての値を通って、数が//Do THINGはあなたを置くべき場所である、実行されます発見されたら、これがループこの

public boolean isNumeric(String str) 
{ 
    return str.matches("-?\\d+(\\.\\d+)?"); 
} 

public void randomName(String str){ 
    for (int i =0 ;i<str.Length;i++){ 
     if(isNumeric(str.charAt(i)+"")){ 
     //Do THING 
     break; 
     } 
    } 
} 

ような何かを行うことができますコード

関連する問題