在 java 中使用枚举检测卡类型时遇到问题

Faccing issue in detecting cardType using enum in java

我正在开发一个接受付款的 Android 应用程序。在这里,我在检测卡类型时遇到问题。在这里,我在 CardType.Java Enum return 中遇到一个问题 visa 它无法找到任何其他 卡片类型。我正在输入 600206 和我的 class return visa 而不是 MAESTRO哪里不对请帮帮我。

CardType.Java

public enum CardType {

VISA("4"),
MCRD("5"),
MAESTRO("67", "56", "502260", "504433",
        "504434", "504435", "504437", "504645", "504681",
        "504753", "504775", "504809", "504817", "504834",
        "504848", "504884", "504973", "504993", "508125",
        "508126", "508159", "508192", "508227", "600206",
        "603123", "603741", "603845", "622018"),
DINERCLUB("30", "36", "38", "39"),
JCB("35"),
AMEX("34", "37"),
DISCOVER("60", "62", "64", "65"),
UNKNOWN("0");

private final String[] pattern;

private CardType(String... pattern) {

    System.out.println("pattern== "+pattern.toString());
    this.pattern = pattern;
}




public static CardType typeOf(String card) {

    System.out.println("card== "+card);
    for (CardType type : values()) {

        System.out.println("type== "+type);
            return type;         
    }
   return null;
}

public static String getScheme(CardType cardType) {
    System.out.println("getScheme");
    switch (cardType) {
    case VISA:
        return "VISA";
    case MCRD:
        return "MCRD";
    case MAESTRO:
        return "MAESTRO";
    case DINERCLUB:
        return "DINERCLUB";
    case JCB:
        return "JCB";
    case AMEX:
        return "AMEX";
    case DISCOVER:
        return "DISCOVER";
    default:
        return "UNKNOWN";
    }
}
}

而不是

return type;

这总是 return 第一个枚举常量 (VISA),do

if (Stream.of(pattern).anyMatch((p) -> card.startsWith(p))) {
    return type;
}

(Java 8) StartsWith 假定。


Java 7:

for (String p : pattern) { 
    if (card.startsWith(p)) {
        return type;
    }
}

您的 typeOf 方法 returns 枚举的第一个元素是 VISA,将其替换为

public static CardType typeOf(String card) {
    for (CardType type : values()) {
        for(String numbers : type.pattern) {
            if(numbers.equals(card)) {
                return type;
            }
        }
    }
    throw new IllegalArgumentException("Type for card pattern " + card + " was not found.");
}