微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用连字符“-”测试信用编号以将其设为 INVALID 当我尝试 4003-6000-0000-0014 时出现错误

如何解决如何使用连字符“-”测试信用编号以将其设为 INVALID 当我尝试 4003-6000-0000-0014 时出现错误

我无法获得包含处女膜的信用卡号作为 INVALID,例如 4003-6000-0000-0014 must give me INVALID 但它给了我字符串错误

公共课程序{

public static void main(String[] args) 
{
    Scanner userInput = new Scanner(system.in) ;
    

    System.out.println("How many credit card you want to check?");
    int numOfCredit = userInput.nextInt() ;
    
    int creditnumbers[] = new int[numOfCredit] ;
    
    for (int i = 0 ; i<numOfCredit ; i++)
    {
        System.out.println("Enter credit card number "+(i+1)+": ") ;
        String creditNumber = userInput.next() ;
        
        validateCreditCardNumber(creditNumber);
        
        
    }
}


private static void validateCreditCardNumber(String str) { // function to check credit numbers

    int[] ints = new int[str.length()];
    for (int i = 0; i < str.length(); i++) {
        ints[i] = Integer.parseInt(str.substring(i,i + 1));
    }
    for (int i = ints.length - 2; i >= 0; i = i - 2) {
        int j = ints[i];
        j = j * 2;
        if (j > 9) {
            j = j % 10 + 1;
        }
        ints[i] = j;
    }
    
    
    int sum = 0;
    for (int i = 0; i < ints.length; i++) 
    {
        sum += ints[i];
    }
    if (sum % 10 == 0) 
    {
        System.out.println("VALID");
    } 
    
    else 
    {
        System.out.println("INVALID");
    }
}

}

使用处女膜后出现这些错误

线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“-” 在 java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) 在 java.base/java.lang.Integer.parseInt(Integer.java:642) 在 java.base/java.lang.Integer.parseInt(Integer.java:770) 在 testing/testing.prog.validateCreditCardNumber(prog.java:33) 在 testing/testing.prog.main(prog.java:22)

解决方法

您可以将字符串“-”替换为“”(空白),然后应用此函数:

    String card = "4003-6000-0000-0014";

    Boolean t = check(card.replace("-",""));

    public static boolean check(String ccNumber)
    {
        int sum = 0;
        boolean alternate = false;
        for (int i = ccNumber.length() - 1; i >= 0; i--)
        {
            int n = Integer.parseInt(ccNumber.substring(i,i + 1));
            if (alternate)
            {
                n *= 2;
                if (n > 9)
                {
                    n = (n % 10) + 1;
                }
            }
            sum += n;
            alternate = !alternate;
        }
        return (sum % 10 == 0);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。