为信用卡生成一个随机数

时间:2014-11-14 18:35:13

标签: java java-ee

我正在尝试使用此方法生成以4开头的16位数的信用卡号 如果issuerSymbol等于ISSUER AMER EXPRESS。如果issuerSymbol等于ISSUER VISA则随机数必须以3开头,而如果是ISSUER MASTER CARD则为5。

 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 个答案:

答案 0 :(得分:1)

我认为你有问题,如果还有其他问题。你需要明白,如果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(包括)和指定值(不包括)之间的伪随机,均匀分布的int值,从这个随机数生成器的序列中提取。

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

randomInteger = 3 + random.nextInt(3); 

这将确保randomInteger始终为3或4或5

答案 1 :(得分: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是一个字符串,只需将第一个数字连接到一个空字符串(“”)并保持连接一个随机数字。