简介:本文介绍了如何使用正则表达式(Regex)来校验港澳台居民居住证号码的有效性,通过详细解析号码结构,提供了可复用的Java代码示例,帮助开发者在项目中快速实现合规校验。
随着港澳台居民居住证制度的实施,越来越多的应用场景需要验证居住证号码的正确性。港澳台居民居住证号码由18位组成,其中包含了地区码、出生日期码、顺序码和校验码。本文将详细介绍如何使用Java语言和正则表达式(Regex)来校验这一特殊号码格式。
港澳台居民居住证号码由以下几部分组成:
基于上述结构,我们可以设计出一个正则表达式来匹配这一号码格式。由于校验码的计算较为复杂且需通过算法验证,正则表达式部分主要关注格式的正确性,不包括校验码的具体验证逻辑。
// 正则表达式解释:// ^ 表示字符串开始// [1-9]\d{5} 表示地区码,第一位非0,后五位任意数字// (18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]) 表示出生日期码,格式为YYYYMMDD// [0-9]\d{3} 表示顺序码,第一位非0,后三位任意数字// [0-9Xx] 表示校验码,最后一位可以是0-9或X(大写)// $ 表示字符串结束String regex = "^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[0-9]\d{3}[0-9Xx]$";
下面是一个使用上述正则表达式进行校验的Java示例代码:
public class HKMTRIDValidator {public static boolean isValid(String id) {String regex = "^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[0-9]\d{3}[0-9Xx]$";return id.matches(regex);}public static void main(String[] args) {String[] ids = {"810000200001010001X", // 示例号码,格式正确"010000200001010001X", // 地区码首位为0,错误"810000200001010001", // 缺少校验码,错误"810000200001010001x" // 校验码为小写,错误};for (String id : ids) {System.out.println(id + " is valid? " + isValid(id));}}}
通过本文