港澳台居住证正则校验实战指南

作者:起个名字好难2024.08.30 07:45浏览量:38

简介:本文介绍了如何使用正则表达式(Regex)来校验港澳台居民居住证号码的有效性,通过详细解析号码结构,提供了可复用的Java代码示例,帮助开发者在项目中快速实现合规校验。

引言

随着港澳台居民居住证制度的实施,越来越多的应用场景需要验证居住证号码的正确性。港澳台居民居住证号码由18位组成,其中包含了地区码、出生日期码、顺序码和校验码。本文将详细介绍如何使用Java语言和正则表达式(Regex)来校验这一特殊号码格式。

港澳台居住证号码结构

港澳台居民居住证号码由以下几部分组成:

  1. 地区码:前6位,表示申领人初次申领居住证时所在的县(市、区、旗、特区)的行政区划代码。
  2. 出生日期码:中间8位,表示申领人出生的年、月、日,按GB/T 7408—1994《数据元和交换格式 信息交换 日期和时间表示法》执行。
  3. 顺序码:第17位,表示在同一地区码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,奇数分配给男性,偶数分配给女性。
  4. 校验码:第18位,根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算得出的检验码。

正则表达式设计

基于上述结构,我们可以设计出一个正则表达式来匹配这一号码格式。由于校验码的计算较为复杂且需通过算法验证,正则表达式部分主要关注格式的正确性,不包括校验码的具体验证逻辑。

  1. // 正则表达式解释:
  2. // ^ 表示字符串开始
  3. // [1-9]\d{5} 表示地区码,第一位非0,后五位任意数字
  4. // (18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]) 表示出生日期码,格式为YYYYMMDD
  5. // [0-9]\d{3} 表示顺序码,第一位非0,后三位任意数字
  6. // [0-9Xx] 表示校验码,最后一位可以是0-9或X(大写)
  7. // $ 表示字符串结束
  8. 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代码实现

下面是一个使用上述正则表达式进行校验的Java示例代码:

  1. public class HKMTRIDValidator {
  2. public static boolean isValid(String id) {
  3. 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]$";
  4. return id.matches(regex);
  5. }
  6. public static void main(String[] args) {
  7. String[] ids = {
  8. "810000200001010001X", // 示例号码,格式正确
  9. "010000200001010001X", // 地区码首位为0,错误
  10. "810000200001010001", // 缺少校验码,错误
  11. "810000200001010001x" // 校验码为小写,错误
  12. };
  13. for (String id : ids) {
  14. System.out.println(id + " is valid? " + isValid(id));
  15. }
  16. }
  17. }

注意事项

  • 正则表达式只能校验格式的正确性,无法验证校验码的正确性。
  • 校验码的计算通常需要依赖额外的算法,如果需要验证校验码,需要实现相应的算法逻辑。
  • 在实际应用中,除了正则表达式校验外,可能还需要结合数据库或API查询来进一步验证号码的真实性。

结论

通过本文