制作Luhn的校验位 - Java

时间:2017-10-05 22:00:37

标签: java luhn

我一直在尝试使用Luhn算法在java中创建一个校验位,我来到这里完全是沮丧。我在第一步,即将所有数字加在一起(如果在加倍后变为大于9,则每秒加倍并减去9)但我无法得到任何接近应该是什么总和的答案。如果我输入“11”作为字符串,输出总和应该是138,当它应该是3.我不知道我的代码有什么问题,我想知道有经验的人是否可以帮助我。< / p>

    import javax.swing.JOptionPane;
    public class Assignment
    {    public static void main (String []args)
{
    String UserNum;
    char c;
    int secondnum, ctwo;
    secondnum = 0;
    ctwo = 0;
    UserNum = JOptionPane.showInputDialog("Please enter a number: ");
    int len, i;
    len = UserNum.length();
    i = 0;
    System.out.println(UserNum);
    while (i < len) {
        c = UserNum.charAt(i);
        System.out.println(c);
        i++;
        if (i%2==0){
            ctwo = c*2;
            if (ctwo > 9) { 
                ctwo = ctwo - 9;
                secondnum = secondnum + ctwo;
            }
            else { secondnum = secondnum + ctwo;
            }
}
else {
    secondnum = secondnum + c;
    }
    System.out.println(secondnum);
        }
    }
    }

补充:即使将代码简化为仅将每个单独数字的值加在一起之后,所述值的总和仍然很远。

1 个答案:

答案 0 :(得分:0)

您正在使用每个数字的ASCII值而不是数字本身。由于ASCII码是连续的,因此很容易提取数值 - 只需减去'0'

c = UserNum.charAt(i) - '0'; // Note that c must be defined as an int