信用卡校验
当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
int[] n=new int[str.length()];
int sum1=0; //奇数项和
int sum2=0; //偶数项和
if(str.length()%2==0){
for(int i=0;i<str.length();i=i+2){
n[i]=(str.charAt(i)-'0');
n[i]=n[i]*2;
if(n[i]>9){
n[i]=n[i]-9;
}
sum1=sum1+n[i];
}
for(int i=1;i<str.length();i=i+2){
n[i]=(str.charAt(i)-'0');
sum2=sum2+n[i];
}
if((sum1+sum2)%10==0){
System.out.println("成功");
}
else{
System.out.println("失败");
}
}
else{
for(int i=0;i<str.length();i=i+2){
n[i]=(str.charAt(i)-'0');
sum2=sum2+n[i];
}
for(int i=1;i<str.length();i=i+2){
n[i]=(str.charAt(i)-'0');
n[i]=n[i]*2;
if(n[i]>9){
n[i]=n[i]-9;
}
sum1=sum1+n[i];
}
if((sum1+sum2)%10==0){
System.out.println("成功");
}
else{
System.out.println("失败");
}
}
}
}
该校验的过程:
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
3、将奇数位总和加上偶数位总和,结果应该可以被10整除。