信用卡号

一个信用卡号必须是13到16位的整数。它的开头必须是:
4,指Visa卡
5,指Master卡
37,指American Express卡
6,指Discover卡

1)从右到左对每个偶数位字翻倍。如果对某个数字翻倍之后的结果是一个两位数,那么就将这个两位加在一起得到一位数。
2)现在将第一步得到的所有一位数相加。
3)将卡号里从右到左在奇数位上的所有数字相加。
4)将第二步和第三步得到的结果相加。
5)如果第四步得到的结果能被10整除,那么卡号是合法的;否则卡号是不合法的。
package com.sugarpie.classtest02;

import java.util.Scanner;

/**
 * @author sugarpie
 * @create 2021-03-25-15:12
 */
public class CardTest {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a credit card number as a long integer:");
        String cardID = input.nextLine();
        Label:while (true){
            char c1 = cardID.charAt(0);
            char c2 = cardID.charAt(1);

            for (int i = 0;i < cardID.length();i++) {
                if (!Character.isDigit(cardID.charAt(i))) {
                    System.out.println(cardID + " is invalid");
                    break Label;
                }
            }
            if (!(c1 == '4' || c1 == '5' || (c1 == '3' && c2 == '7') || c1 == '6')) {
                System.out.println(cardID + " is invalid");
                break Label;
            }
            if (cardID.length() < 13 || cardID.length() > 16) {
                System.out.println(cardID + " is invalid");
                break Label;
            }

            int sumEvenNumber = 0,sumOddNumber = 0;
            for (int i = cardID.length() - 1;i >= 0;i--){
                if (i % 2 == 0){
                    char charEven = cardID.charAt(i);
                    int evenNumber = charEven - '0';
                    sumEvenNumber += evenNumber * 2 / 10 + evenNumber * 2 % 10;
                }else {
                    char oddEven = cardID.charAt(i);
                    int OddNumber = oddEven - '0';
                    sumOddNumber += OddNumber;
                }
            }
            int sum = sumEvenNumber + sumOddNumber;
            if (sum % 10 == 0){
                System.out.println(cardID + " is valid");
            }else {
                System.out.println(cardID + " is invalid");
            }
            break Label;
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值