我正在用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方法