2014-11-14 28 views
0

我試圖用這種方法來生成16位數字的信用卡號碼,如果issuerSymbol等於ISSUER AMER EXPRESS,則以4 開頭。如果issuerSymbol等於ISSUER VISA並且它是ISSUER MASTER CARD,那麼隨機數必須以3開頭。生成一個信用卡的隨機數

public Integer getIssuerCode(String issuerSymbol){ 
      int randomInteger = 0; 
      Random random = new Random(); 


    for(int i = 0; i < 5; i++) { 
      randomInteger = random.nextInt(); 
     if (issuerSymbol.equals(ISSUER_AMER_EXPRESS)) { 

     } 

      else { 
      System.out.println("error"); 
     } 
     if(issuerSymbol.equals(ISSUER_VISA)){ 

     } 
      else{ 
       System.out.println("error"); 
      } 
      if (issuerSymbol.equals(ISSUER_MASTER_CARD)){ 

     } 
      else{ 
       System.out.println("error"); 
      } 
    } 

    return randomInteger; 
     } 
+2

那麼問題是什麼?看起來你幾乎沒有開始,你是否卡在某個特定的地方? – nerdwaller 2014-11-14 18:37:05

回答

1

我覺得你有問題,如果和其他人。你要明白,它會在別的去,如果,如果是不正確的代碼應改爲他們的if else if和else ...

if (issuerSymbol.equals(ISSUER_AMER_EXPRESS)) { 

} else if(issuerSymbol.equals(ISSUER_VISA)){ 

} else if (issuerSymbol.equals(ISSUER_MASTER_CARD)){ 

} else { 
      System.out.println("error"); 
} 

另一個建議的Random類包括nextInt(int)它(每Javadoc)*返回一個僞隨機,均勻分佈在0(包含)和指定值(不包括)之間的值,從此隨機數生成器的序列中抽取。

randomInteger = 3 + random.nextInt() % 3; 

randomInteger = 3 + random.nextInt(3); 

這將確保您randomInteger總是在3或4或5

+0

我無法得到這個工作randomInteger = 2 + random.nextInt()%3; – Tom 2014-11-14 19:34:43

+0

@Tom請檢查編輯! – StackFlowed 2014-11-14 19:37:48

0

隨着16位,對於信用卡,你可以得到最大的號碼是5999999999999999,而int可以表示的最大數字是2^31-1或2,147,483,647,所以我建議使用BigInteger。根據您計劃如何使用randomInteger,它可以是BigInteger或String。

由於您試圖獲取16位數字,但第一個數字確定爲3,4或5,這意味着您需要15個隨機整數。您可以使用if-else if語句根據發行者符號設置randomInteger,然後您可以使用for循環選擇15個隨機整數並將它們附加到randomInteger。

//assuming randomInteger is already equal to 3, 4, or 5 
//and randomInteger is of type BigInteger 
for(int i = 0; i < 15; i++) 
{ 
    randomInteger = randomInteger.multiply(BigInteger.valueOf(10); 
    randomInteger = randomInteger.add(BigInteger.valueOf(random.nextInt(10)); 
} 

如果你想randomInteger是一個字符串,只需連接第一位數爲空字符串(「」),並保持連接隨機數字。