在Delphi中使用正則表達式校驗身份證號


以下內容轉自:https://my.oschina.net/ousinka/blog/3048132

如何定義身份證號的正則表達式呢?

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
...

好了,一起用吧。支持閏年的!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM