正則匹配身份證號碼


正則匹配身份證號碼  

/^[1-9][0-7]\d{4}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|X|x)?$/

 

首先,地址碼的前2位是省級的編號,到統計局去查詢得知第1位非0,並且目前的范圍為1-9,9是國外的身份證號碼。第2位的范圍為0-7。統計局一般每一年都會公布一次更新的地址碼,但對比多年來的地址碼可以看出地址碼基本上是不變的(要是變了,現有的身份證號碼豈不是都沒用了^_^)。我們的地址碼的正則表達式可以這樣寫:/^[1-9][0-7]\d{4}/,其實,這么寫不夠精確,倘若要就目前的地址碼寫出精確的表達式,應該這么寫/^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\d{4}/,這樣寫顯然精確多了,但表達式長了很多,當然為求精確表達式長一點是可以接受的,但是假如統計局修改了省級地址碼,那么該表達式要根據實際情況稍作改動,所幸省級地址碼應該是不會變的,呵呵,所以選擇哪一種表達式都是可以的,我這就不寫那么長的表達式了,所以選擇/^[1-9][0-7]\d{4}/吧。


 

接下來就是日期了喔,呵呵,貌似之前寫過的日期匹配可以借鑒來用一下,當時的那個表達式如下:

/^((((19|20)\d{2})-(0?[13-9]|1[012])-(0?[1-9]|[12]\d|30))|(((19|20)\d{2})-(0?[13578]|1[02])-31)|(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-29))$/

這個表達式可以匹配1900-2099年的日期,還支持閏年。

 


 

我們的表達式不需要匹配那么長的時間,能夠匹配二十世紀的就夠了,什么,不知道二十世紀?1900-1999總該知道吧^_^為什么匹配了這個范圍就夠了呢?去查一下居民身份證的歷史吧,我敢打保票1900-1999的范圍還太大了。至於二十一世紀的新一代,呵呵,就算他是2000年出生的,目前也就9歲(有些算法是8歲,囧),這些人的號碼應該還打印在戶口簿里,拿出手也不會產生什么作用,再說,二十一世紀的人也不屑於我目前所寫的匹配^_^


 

好吧,廢話太多了,開始匹配日期吧。稍微修改了以上表達式:

/((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))/

 


 

正則表達式里沒有計算驗證的能力,所以對於順序碼,我們除了基本的匹配外無力於做什么,所以順序碼的表達式為:/\d{3}/


 

最后一位數字驗證碼——/(\d|X|x)?$/。之所以那么寫是因為,最后一位可能值為數字或X,但有些人可能習慣將X寫成小寫的x,我們必須視為正確,而最后的?是為了與15位號碼兼容,此時只需將15位號碼的年份用4位表示即可用我們以下整合的表達式進行匹配了——

/^[1-9][0-7]\d{4}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|X|x)?$/

地址碼精確一點的表達式:

/^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\d{4}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|X|x)?$/


免責聲明!

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



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