Java 为信用卡生成一个随机数

Java 为信用卡生成一个随机数,java,jakarta-ee,Java,Jakarta Ee,我试图用这个方法生成一个16位的信用卡号,以4开头 如果发卡行符号等于发卡行美国运通。如果发卡机构SYMBOL等于发卡机构VISA,则随机数必须以3开头,如果发卡机构万事达卡为5,则随机数必须以3开头 public Integer getIssuerCode(String issuerSymbol){ int randomInteger = 0; Random random = new Random(); for(int i = 0;

我试图用这个方法生成一个16位的信用卡号,以4开头 如果发卡行符号等于发卡行美国运通。如果发卡机构SYMBOL等于发卡机构VISA,则随机数必须以3开头,如果发卡机构万事达卡为5,则随机数必须以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;
        }
public整数getIssuerCode(字符串issuerSymbol){
整数=0;
随机=新随机();
对于(int i=0;i<5;i++){
randomInteger=random.nextInt();
if(发行人符号等于(发行人名称快报)){
}
否则{
System.out.println(“错误”);
}
if(发卡机构符号等于(发卡机构VISA)){
}
否则{
System.out.println(“错误”);
}
if(发卡机构符号等于(发卡机构主卡)){
}
否则{
System.out.println(“错误”);
} 
}
返回随机整数;
}

我认为你在if和else方面有问题。您需要了解,如果if不为真,它将进入else,代码应更改为if-else if and 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
类包括(根据Javadoc)*返回一个伪随机、均匀分布的
int
值,该值介于0(包括)和指定值(排除)之间,从该随机数生成器的序列中提取

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


这将确保您的randomInteger始终为3、4或5,并包含16位数字,您可以获得的信用卡最大数字是5999999999999,而int可以表示的最大数字是2^31-1或2147483647,因此我建议改用BigInteger。根据您计划如何使用randomInteger,它可以是BigInteger或字符串

由于您试图获得一个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已经等于3、4或5
//randomInteger的类型为BigInteger
对于(int i=0;i<15;i++)
{
randomInteger=randomInteger.multiply(BigInteger.valueOf(10);
randomInteger=randomInteger.add(BigInteger.valueOf(random.nextInt(10));
}

如果您希望randomInteger是一个字符串,只需将第一个数字连接到一个空字符串(“”),然后继续连接一个随机数字。

那么问题是什么?看起来您还没有开始,您是否被困在某个特定的位置?我无法让它工作randomInteger=2+random.nextInt()%3;
//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));
}