diff --git a/CHANGELOG.md b/CHANGELOG.md index f9d6cd7d5..fcb428c6a 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐣新特性 * 【core 】 BooleanUtil的andOfWrap和orOfWrap()忽略null(issue#2599@Github) * 【jwt 】 优化JWT自动识别header中的算法,并可自定义header中key的顺序(issue#I5QRUO@Gitee) +* 【core 】 IdcardUtil增加convert18To15方法(issue#I5QYCP@Gitee) + ### 🐞Bug修复 * 【core 】 修复ObjectUtil.defaultIfXXX中NPE问题(pr#2603@Github) * 【db 】 修复Hive2驱动无法识别问题(issue#2606@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java index 9e1278ebc..99f3137b6 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java @@ -146,6 +146,19 @@ public class IdcardUtil { return idCard18.toString(); } + /** + * 将18位身份证号码转换为15位 + * + * @param idCard 18位身份编码 + * @return 15位身份编码 + */ + public static String convert18To15(String idCard) { + if (StrUtil.isNotBlank(idCard) && IdcardUtil.isValidCard18(idCard)) { + return idCard.substring(0, 6) + idCard.substring(8, idCard.length() - 1); + } + return idCard; + } + /** * 是否有效身份证号,忽略X的大小写
* 如果身份证号码中含有空格始终返回{@code false} diff --git a/hutool-core/src/test/java/cn/hutool/core/util/IdcardUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/IdcardUtilTest.java index 8afba95a1..2e38992f7 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/IdcardUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/IdcardUtilTest.java @@ -46,6 +46,12 @@ public class IdcardUtilTest { Assert.assertEquals("33010219200403064X", convert15To18Second); } + @Test + public void convert18To15Test() { + String idcard15 = IdcardUtil.convert18To15("150102198807303035"); + Assert.assertEquals(ID_15, idcard15); + } + @Test public void getAgeByIdCardTest() { DateTime date = DateUtil.parse("2017-04-10");