Delphi中使用正则表达式校验身份证号支持闰年  
官方Delphi 学习QQ群: 682628230(三千人)
频道

Delphi中使用正则表达式校验身份证号支持闰年


如何定义身份证号的正则表达式呢?


1、省份编码

[1-9]\d{5}

2、年份

(18|19|20)?\d{2}

3、月份为 1, 3, 5, 7, 8, 10, 12,天数范围为 01 - 31,匹配MMDD的正则表达式为:

(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])

4、月份为 4, 6, 9, 11,天数范围为 01-30,匹配MMDD的正则表达式为:

(0[469]|11)(0[1-9]|[12][0-9]|30)

5、月份为 2,考虑平年情况,匹配MMDD的正则表达式为:

02(0[1-9]|[1][0-9]|2[0-8])

6、闰年

能被4整除但不能被100整除的年份。

(1[89]|20)(0[48]|[2468][048]|[13579][26])

能被400整除的年份,只有1900和2000两个年份

(19|20)00

闰年的2月份有29天

(((1[89]|20)(0[48]|[2468][048]|[13579][26]))|((19|20)00))0229

7、校验码4位

\d{3}(\d|X|x)


8、包含闰年 yyyyMMdd:

((1[89]|20)\d{2}(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((((1[89]|20)(0[48]|[2468][048]|[13579][26]))|((19|20)00))0229)

9、合并起来身份证正则式为:


[1-9]\d{5}(((1[89]|20)\d{2}(((0[13578]|1[0-2])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((((1[89]|20)(0[48]|[2468][048]|[13579][26]))|((19|20)00))0229))\d{3}(\d|X|x)


现在我们得到了身份证号的正则表达式,现在看看Delphi中如何使用他?


首先要引用System.RegularExpressions单元,然后见下面代码:


  pattern:='^[1-9]\d{5}(((1[89]|20)\d{2}(((0[13578]|1[0-2])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((((1[89]|20)(0[48]|[2468][048]|[13579][26]))|((19|20)00))0229))\d{3}(\d|X|x)$';

  if TRegEx.Match(身份证号, pattern ).Success then

...

以下内容转自:https://my.oschina.net/ousinka/blog/3048132




推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 7.0504291057587 seconds