(群硕)6. 编写一个程序,验证从标准输入获得的信用卡号是否校验通过, 校验通过,则输出”成功“,校验未通过则输出”失败“。该校验过程如下:
(1)从卡号最后一位数字开始,逆向将奇数位(l,3,5等等)相加。 (2)从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数, 则将其减去9),再求和。 (3)将奇数位总和加上偶数位总和,结果应该可以被10整除。 例如,卡号是54321123456788881,则程序应输出:成功。请编程实现。
public class KaHao {
/*
* (群硕)6. 编写一个程序,验证从标准输入获得的信用卡号是否校验通过, 校验通过,则输出”成功“,校验未通过则输出”失败“。该校验过程如下:
* (1)从卡号最后一位数字开始,逆向将奇数位(l,3,5等等)相加。 (2)从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,
* 则将其减去9),再求和。 (3)将奇数位总和加上偶数位总和,结果应该可以被10整除。
* 例如,卡号是54321123456788881,则程序应输出:成功。请编程实现。
*/
public static void main(String[] args) {
//单个字符转换为整型,只需:int num=ch[i]-'0';
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的卡号:");
String str = sc.next();
char[] ch = str.toCharArray();
int re=ji(ch)+ou(ch);
if (re%10==0) {
System.out.println("这是一个正确的卡号");
}
else
{
System.out.println("这个卡号不正确");
}
}
private static int ou(char[] ch) {
int sum2=0;
//数组的最后一位比长度少1,偶数位又减一
for (int i = ch.length-1-1; i >= 0; i-=2) {
int j=ch[i]-'0';
j=j*2;
if (j>=10) {
j-=9;
}
sum2+=j;
}
return sum2;
}
private static int ji(char[] ch) {
int sum1=0;
//倒数第一位为数组长度减一
for (int i = ch.length-1; i >=0; i-=2)
{
int j=ch[i]-'0';
sum1+=j;
}
return sum1;
}
}