我正在尝试使用此方法生成以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;
}
答案 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是一个字符串,只需将第一个数字连接到一个空字符串(“”)并保持连接一个随机数字。