信用卡号验证

【编程大题】信用卡号验证
当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?
其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过 Luhn 算法来验证通过。
该校验的过程:
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5 等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以 2(如果乘积为两位数,则将其减去 9),再求和。
3、将奇数位总和加上偶数位总和,结果应该可以被 10 整除。
例如,卡号是:5432123456788881
则奇数、偶数位(用红色标出)分布:5432123456788881
奇数位和=35偶数位乘以 2(有些要减去 9)的结果:1 6 2 6 1 5 7 7,求和=35。
最后 35+35=70 可以被 10 整除,认定校验通过。
请编写一个程序,从标准输入获得卡号,然后判断是否校验通过。
通过显示:“成功”,否则显示“失败”。
比如,用户输入:356827027232780
程序输出:成功
【程序测试参考用例】
356406010024817 成功
358973017867744 成功
356827027232781 失败
306406010024817 失败
【信用卡号验证】358973017867754 失败
【解题思路】
其实这道题相对而言比较简单,但还是有几个注意的点。
1.因为是从卡号的最后一个数字开始,所以偶数位的第一个数其实是奇数,奇数位的第一个数是偶数。
2.确定第一个数为奇数或偶数后,就可以分别求出奇数位的和&偶数数*2,大于9减9。

package com.sise.test; import java.util.Scanner; public class Test01 { public static void main(String[] args) { // TODO Auto-generated method stubScanner sc=new Scanner(System.in); String s=sc.nextLine(); char[] a=s.toString().toCharArray(); int sum1=0,sum2=0; if(a.length%2==0){for(int i=1; i9){ sum2+=(a[i]-'0')*2-9; }else{ sum2+=(a[i]-'0')*2; } }}else{ //奇数位总和 for(int i=0; i9){ sum2+=(a[i]-'0')*2-9; }else{ sum2+=(a[i]-'0')*2; } }}if((sum1+sum2)%10==0){ System.out.println("成功"); }else{ System.out.println("失败"); } } }


    推荐阅读