使用java验证信用卡到期日期?

时间:2012-07-17 18:50:23

标签: java regex validation date

我希望以MM / YY格式验证信用卡到期日期。我不知道如何验证,是否采用简单日期格式/正则表达式。

感谢您的帮助。

5 个答案:

答案 0 :(得分:13)

使用SimpleDateFormat解析Date,然后将其与新的Date进行比较,即“现在”:

String input = "11/12"; // for example
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/yy");
simpleDateFormat.setLenient(false);
Date expiry = simpleDateFormat.parse(input);
boolean expired = expiry.before(new Date());

编辑:

感谢@ryanp的宽大方面。如果输入不正确,上面的代码现在将抛出ParseException

答案 1 :(得分:6)

扮演魔鬼的拥护者......

boolean validateCardExpiryDate(String expiryDate) {
    return expiryDate.matches("(?:0[1-9]|1[0-2])/[0-9]{2}");
}

翻译为:

...所以这个版本需要零填充月份(01 - 12)。在第一个?之后添加0以防止此情况发生。

答案 2 :(得分:0)

你真的需要使用正则表达式吗?正则表达式实际上只适用于匹配字符,而不是日期。我认为使用简单的日期函数会容易得多。

答案 3 :(得分:0)

我认为代码会更好:

int month = 11;
int year = 2012;

int totalMonth = (year * 12) + month;
totalMonth++; // next month needed
int nextMonth = totalMonth % 12;
int yearOfNextMonth = totalMonth / 12;

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/yyyy");
simpleDateFormat.setLenient(false);
Date expiry = simpleDateFormat.parse(nextMonth + "/" + yearOfNextMonth);
boolean expired = expiry.before(new Date());

您需要计算下个月,因为信用卡上显示的月份是信用卡有效的最后一个月份。

答案 4 :(得分:0)

java.time

要验证您是否具有有效的到期日期字符串:

    DateTimeFormatter ccMonthFormatter = DateTimeFormatter.ofPattern("MM/uu");
    String creditCardExpiryDateString = "11/21";
    try {
        YearMonth lastValidMonth = YearMonth.parse(creditCardExpiryDateString, ccMonthFormatter);
    } catch (DateTimeParseException dtpe) {
        System.out.println("Not a valid expiry date: " + creditCardExpiryDateString);
    }

要验证它是否表示信用卡已过期:

        if (YearMonth.now(ZoneId.systemDefault()).isAfter(lastValidMonth)) {
            System.out.println("Credit card has expired");
        }

请考虑一下您要使用的时区,因为新月份并非在所有时区都同时开始。如果您想使用UTC:

        if (YearMonth.now(ZoneOffset.UTC).isAfter(lastValidMonth)) {

为方便起见,例如,欧洲/基辅时区:

        if (YearMonth.now(ZoneId.of("Europe/Kiev")).isAfter(lastValidMonth)) {

链接: Oracle tutorial: Date Time解释了如何使用java.time。