From d41a22a458bf6ea7c48250da8e28e5573d6a871a Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 29 Mar 2024 11:58:47 +0800 Subject: [PATCH] fix code --- .../main/java/org/dromara/hutool/core/data/CIN.java | 4 ++-- .../dromara/hutool/core/data/IdcardUtilTest.java | 13 +++++++++++++ .../hutool/cron/pattern/matcher/PatternMatcher.java | 5 ++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/data/CIN.java b/hutool-core/src/main/java/org/dromara/hutool/core/data/CIN.java index 531ec3a27..23d6b4434 100755 --- a/hutool-core/src/main/java/org/dromara/hutool/core/data/CIN.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/data/CIN.java @@ -317,8 +317,8 @@ public class CIN { return false; } - // 省份 - final String proCode = idCard.substring(0, 2); + // 截取省份代码。新版外国人永久居留身份证以9开头,第二三位是受理地代码 + final String proCode = StrUtil.startWith(idCard, '9') ? idCard.substring(1, 3): idCard.substring(0, 2); if (null == CITY_CODES.get(proCode)) { return false; } diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/data/IdcardUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/data/IdcardUtilTest.java index 8d1374672..b4c991a0f 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/data/IdcardUtilTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/data/IdcardUtilTest.java @@ -164,4 +164,17 @@ public class IdcardUtilTest { flag = IdcardUtil.isValidTWCard(errTwCard2); Assertions.assertFalse(flag); } + + @Test + void foreignTest() { + // 新版外国人永久居留身份证号码 + final String FOREIGN_ID_18 = "932682198501010017"; + Assertions.assertTrue(IdcardUtil.isValidCard(FOREIGN_ID_18)); + + final DateTime date = DateUtil.parse("2017-04-10"); + Assertions.assertEquals(IdcardUtil.getAge(FOREIGN_ID_18, date), 32); + + // 新版外国人永久居留身份证 + Assertions.assertTrue(IdcardUtil.isValidCard18("932682198501010017")); + } } diff --git a/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/matcher/PatternMatcher.java b/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/matcher/PatternMatcher.java index 5acde90b6..ee48b75a2 100644 --- a/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/matcher/PatternMatcher.java +++ b/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/matcher/PatternMatcher.java @@ -13,7 +13,6 @@ package org.dromara.hutool.cron.pattern.matcher; import org.dromara.hutool.core.date.DateUtil; -import org.dromara.hutool.core.lang.Console; import org.dromara.hutool.cron.pattern.Part; import java.time.Year; @@ -202,7 +201,7 @@ public class PatternMatcher { if (i == Part.DAY_OF_MONTH.ordinal()) { final boolean isLeapYear = DateUtil.isLeapYear(newValues[Part.YEAR.ordinal()]); - final int month = values[Part.MONTH.ordinal()]; + final int month = newValues[Part.MONTH.ordinal()]; nextValue = ((DayOfMonthMatcher) matchers[i]).nextAfter(values[i], month, isLeapYear); } else { nextValue = matchers[i].nextAfter(values[i]); @@ -235,7 +234,7 @@ public class PatternMatcher { if (i == Part.DAY_OF_MONTH.ordinal()) { final boolean isLeapYear = DateUtil.isLeapYear(newValues[Part.YEAR.ordinal()]); - final int month = values[Part.MONTH.ordinal()]; + final int month = newValues[Part.MONTH.ordinal()]; nextValue = ((DayOfMonthMatcher) matchers[i]).nextAfter(values[i] + 1, month, isLeapYear); } else { nextValue = matchers[i].nextAfter(values[i] + 1);