我正在尝试使用这种方法生成一个16位的信用卡号码,如果issuerSymbol等于发行人AMER,则以4开头。随机数必须从3开始,如果issuerSymbol等于发卡者签证和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;
}发布于 2014-11-14 18:39:21
我觉得你对自己有意见。您需要理解的是,如果if不是真的话,那么它就会进入其中
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中。
发布于 2014-11-14 21:30:37
对于16位数,您可以得到的信用卡的最大数字是5999999999999999,而最大的int可以表示为2^31-1或2,147,483,647,所以我建议使用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是一个字符串,只需将第一个数字连接到一个空字符串(""),然后继续连接一个随机数字。
https://stackoverflow.com/questions/26936641
复制相似问题