在Java中验证CCN?

在Java中验证CCN?,java,validation,credit-card,equation,Java,Validation,Credit Card,Equation,我正在尝试编写一个信用卡验证程序。然而,我一辈子也弄不明白为什么我输入的完全有效的信用卡会变成无效的 我用卢恩方程来验证 Luhn方法如下所示: 卢恩公式: 从数字中去掉最后一位数字。最后一个数字是我们想要的 对照 把数字倒过来 将奇数位置(1、3、5等)中的数字乘以2,然后减去9得到所有大于9的结果 将所有数字相加到校验位(最后一个数字 卡)是您需要添加的金额,以获得 10的倍数(模10) 信用卡的例子来自美国 我的代码是 谢谢 (还有,这是我第一次使用Javadoc!让我知道我是怎么做的

我正在尝试编写一个信用卡验证程序。然而,我一辈子也弄不明白为什么我输入的完全有效的信用卡会变成无效的

我用卢恩方程来验证

Luhn方法如下所示:

卢恩公式:
  • 从数字中去掉最后一位数字。最后一个数字是我们想要的 对照
  • 把数字倒过来
  • 将奇数位置(1、3、5等)中的数字乘以2,然后减去9得到所有大于9的结果
  • 将所有数字相加到校验位(最后一个数字 卡)是您需要添加的金额,以获得
    10的倍数(模10)
信用卡的例子来自美国

我的代码是

谢谢

(还有,这是我第一次使用Javadoc!让我知道我是怎么做的!)

编辑:我使用的Luhn方法显然不起作用: 我在控制台中的输出:

>4024007142327070
707232417004204
[7, 0, 7, 2, 3, 2, 4, 1, 7, 0, 0, 4, 2, 0, 4]
[14, 0, 14, 2, 6, 2, 8, 1, 14, 0, 0, 4, 4, 0, 8]
[5, 0, 5, 2, 6, 2, 8, 1, 5, 0, 0, 4, 4, 0, 8]
50
50 % 10 =/= 0

You inputted card: 4024007142327070
Your card is not valid because it doesn't check against the Luhn Equation.
50%10=/=0

那是不对的。这是怎么回事

快速编辑。 我太生气了,我检查了一下


50模10实际上是0。

使用apache commons validator中的org.apache.commons.validator.CreditCardValidator

从apache commons validator使用org.apache.commons.validator.CreditCardValidator

你在这里不是做错了吗:

//Finally, check if the number we got from adding all the other numbers
    //when divided by ten has a remainder equal to the check number.
    if (addedNumbers % 10 == cn)
    {
        return true;
    }
    else
    {
        return false;
    }
addedNumber
是一个
int
cn
char

试试这个:
System.out.println(1=='1')

这永远是错误的

编辑:

它执行ascii值比较,因此从不抛出错误

例如,这将导致
TRUE

System.out.println(49=='1')

你在这里不是做错了吗:

//Finally, check if the number we got from adding all the other numbers
    //when divided by ten has a remainder equal to the check number.
    if (addedNumbers % 10 == cn)
    {
        return true;
    }
    else
    {
        return false;
    }
addedNumber
是一个
int
cn
char

试试这个:
System.out.println(1=='1')

这永远是错误的

编辑:

它执行ascii值比较,因此从不抛出错误

例如,这将导致
TRUE


System.out.println(49=='1')

链接会消失。请在这里发布一个演示此行为的最小示例。@Takendarkk好吧,链接在我这边并没有死,但我会将该方法编辑到帖子中。我知道它现在还没有死。让我重新措辞。链接将来可能会消亡,所以与其依赖它们,不如将你的内容发布在这里。@Takendark我理解你的担忧。发布了该方法。
将*奇数位置*(1、3、5等)的数字乘以2
,同时:
将多个奇数乘以2
。链接无效。请在这里发布一个演示此行为的最小示例。@Takendarkk好吧,链接在我这边并没有死,但我会将该方法编辑到帖子中。我知道它现在还没有死。让我重新措辞。链接将来可能会消亡,所以与其依赖它们,不如将你的内容发布在这里。@Takendark我理解你的担忧。张贴方法。
将*奇数位置*(1、3、5等)的数字乘以2
,同时:
将多个奇数乘以2
;这不好玩!程序的要点是手动执行!那个这不好玩!程序的要点是手动执行!出于某种原因,我认为Java会自动将char转换为int。非常感谢!用你的自动施法疑问编辑。我通过添加
String checkString=“”+cn;int check=Integer.valueOf(checkString)
然后将检查更改为
if(addedNumber%10==检查)
。非常感谢!出于某种原因,我认为Java会自动将char转换为int。非常感谢!用你的自动施法疑问编辑。我通过添加
String checkString=“”+cn;int check=Integer.valueOf(checkString)
然后将检查更改为
if(addedNumber%10==检查)
。非常感谢!
//Finally, check if the number we got from adding all the other numbers
    //when divided by ten has a remainder equal to the check number.
    if (addedNumbers % 10 == cn)
    {
        return true;
    }
    else
    {
        return false;
    }