15位和18位身份證號碼驗證的正則表達式總結

身份證編碼結構介紹:

xxxxxx yyyy MM dd 375 0     十八位

xxxxxx    yy MM dd   75 0     十五位

地區: [1-9]\d{5}

年的前兩位: (18|19|([23]\d))            1800-2399

年的後兩位: \d{2}

月份: ((0[1-9])|(10|11|12))

天數: (([0-2][1-9])|10|20|30|31)          閏年不能禁止29+

三位順序碼: \d{3}

兩位順序碼: \d{2}

校驗碼: [0-9Xx]

正則表達式

十八位: ^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$

十五位: ^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$

總:

( ^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)

 

 

mysql測試:(注意mysql中需要把\d 轉化爲[0-9] 正則表達式纔可用)

select '411423199808191520' regexp '(^[0-9]{15}$)|(^[0-9]{18}$)|(^[0-9]{17}([0-9]|X|x)$)';  

select '411423199808191520' regexp '[1-9][0-9]{5}(18|19|([23][0-9]))[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}[0-9Xx]$';

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章