Java信用卡验证– Java中的Luhn算法

时间:2020-02-23 14:34:59  来源:igfitidea点击:

最近,我知道信用卡号不是随机的,并且通过了Luhn算法测试。

Java信用卡验证

任何信用卡号都应通过以下测试:

  • 从最右边的数字开始,我们应该每隔两位数字加倍。
    如果双精度数大于9,则将两个数字相加,以使最终数字为一个数字。

  • 现在将数字中的所有数字,未更改的数字和加倍的数字相加。

  • 最终的总和应为10的倍数,或者数字的mod 10应该为0。
    如果不是,则其不是有效的信用卡号。

我们以信用卡号为12345678903555的示例进行检查。

位数为:1,2,3,4,5,6,7,8,9,0,3,5,5,5加倍后:2,2,6,4,1,6,5,8,9 ,0,6,5,1,5数字总和:2 + 2 + 6 + 4 + 1 + 6 + 5 + 8 + 9 + 0 + 6 + 5 + 1 + 5 = 60 = 6 * 10,因此a有效的信用卡号。

Java中的Luhn算法

其中我提供了Java Luhn算法程序来验证信用卡号。

package com.theitroad.util;

public class JavaLuhnAlgorithm {

	public static void main(String[] args) {
		validateCreditCardNumber("12345678903555");
		String imei = "012850003580200";
		validateCreditCardNumber(imei);
	}

	private static void validateCreditCardNumber(String str) {

		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(str + " is a valid credit card number");
		} else {
			System.out.println(str + " is an invalid credit card number");
		}
	}

}

其中我将验证方法的输入作为String输入,以便在第一个数字为0的地方也可以使用。

上面程序的输出是:

12345678903555 is a valid credit card number
012850003580200 is a valid credit card number