我正在用java实现一个算法来测试信用卡的有效性
我使用了我正在用java实现一个算法来测试信用卡的有效性,java,Java,我使用了Luhn算法,但由于某种原因,我尝试的所有卡号都会显示卡号有效,即使不是 这是我的代码,到目前为止,我相信问题在于toString方法,但我不知道如何修复它。请帮忙 public class CreditCard { private String number; private String result; private int sum = 0; private int n = 0; privat
Luhn算法
,但由于某种原因,我尝试的所有卡号都会显示卡号有效,即使不是
这是我的代码,到目前为止,我相信问题在于toString
方法,但我不知道如何修复它。请帮忙
public class CreditCard
{
private String number;
private String result;
private int sum = 0;
private int n = 0;
private boolean value = true;
private StringBuilder builder = new StringBuilder();
private String word = builder.toString();
public CreditCard(String number)
{
this.number = number;
}
public String toString()
{
for(int x = 0; x < number.length(); x++)
{
char c = number.charAt(x);
if(Character.isDigit(c)){
builder.append(c);
}
}
String result = builder.toString() + " was issued by " + getIssuer();
if(isValid())
result += " and is valid.";
else
result += " and is not valid.";
return result;
}
public String getIssuer()
{
if(builder.length() == 13 && builder.substring(0, 1).equals("4") )
result = "VISA";
else if(builder.length() == 14)
{
if(builder.substring(0, 2).equals("36") || builder.substring(0, 2).equals("38")
|| builder.substring(0, 3).equals("300") || builder.substring(0, 3).equals("301")
|| builder.substring(0, 3).equals("302") || builder.substring(0, 3).equals("303")
|| builder.substring(0, 3).equals("304") || builder.substring(0, 3).equals("305"))
result = "Diner's Club";
else
result = "Unknown";
}
else if(builder.length() == 15)
{
if(builder.substring(0, 2).equals("34") || builder.substring(0, 2).equals("37"))
result = "American Express";
else
result = "Unknown";
}
else if(builder.length() == 16)
{
if(builder.substring(0, 2).equals("51") || builder.substring(0, 2).equals("52")
|| builder.substring(0, 2).equals("53") || builder.substring(0, 2).equals("54")
|| builder.substring(0, 2).equals("55"))
{
result = "MasterCard";
}
else if(builder.substring(0, 4).equals("6011"))
{
result = "Discover";
}
else if(builder.substring(0, 1).equals("4"))
{
result = "VISA";
}
else
result = "Unknown";
}
else
result = "Unknown";
return result;
}
public boolean isValid()
{
if(word.length() % 2 == 0){
for(int i = 0; i < word.length(); i++)
{
char c = word.charAt(i);
int num = Character.getNumericValue(c);
if(i % 2 == 0)
{
n = num * 2;
if(n > 9)
{
n -=9;
}
sum +=n;
}
else
sum+= num;
}
}
else
{
for(int x = 0; x < word.length(); x++)
{
char c = word.charAt(x);
int num = Character.getNumericValue(c);
if(x % 2 != 0)
{
n = num * 2;
if(n > 9)
{
n -=9;
}
sum +=n;
}
else
sum += num;
}
}
if(sum % 10 == 0)
value = true;
else
value = false;
return value;
}
}
公共信用卡
{
私有字符串编号;
私有字符串结果;
私有整数和=0;
私有整数n=0;
私有布尔值=真;
私有StringBuilder=新StringBuilder();
私有字符串word=builder.toString();
公共信用卡(字符串编号)
{
这个数字=数字;
}
公共字符串toString()
{
对于(int x=0;x9)
{
n-=9;
}
总和+=n;
}
其他的
sum+=num;
}
}
其他的
{
对于(int x=0;x9)
{
n-=9;
}
总和+=n;
}
其他的
sum+=num;
}
}
如果(总和%10==0)
值=真;
其他的
值=假;
返回值;
}
}
首先,您需要修改您的方法,我会在getIssuer和isValid方法中添加一个参数。这些方法是公共的,可以从类外部调用它们,它们返回一些不正确的内容。
如果不可能,则必须使用number实例变量
代码返回错误的结果,因为您没有设置word变量的值,它是null。btw,quick search给出了实现Luhn算法的java方法