正則判斷奇數行 驗證身份證號的正規表示式

2021-10-16 09:39:27 字數 1059 閱讀 3426

正規表示式是個好工具。不管對程式設計師,還是對資料分析人員,正則是非常重要的技能。它的作用有點像瑞士軍刀,在一些文字匹配、文字校驗的情景下,一行正規表示式,往往勝過幾十行**的作用。

比如今天**的驗證身份證號,怎麼知道一串字元是不是有效的身份證號呢?

按照身份證號的編碼規則

身份證號如果嚴格校驗,要求比較多:

是不是很頭大?

這些邏輯如果用普通的程式設計方法,估計每個幾百行**是搞不定的,但在強大的正則面前,這都不是事!

以下是實際中用過的正則寫法。我嵌入sql的時候,是吧下面四種邏輯合到乙個正則裡去的,為了方便閱讀,拆成四個來說明,當然也並非完美結果,如果有更好寫法還請給予指導,先謝過啦!

18位非閏年

^[1-9][0-9]19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9][0-9xxaa]$

18位閏年

^[1-9][0-9]19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9][0-9xxaa]$

15位非閏年

^[1-9][0-9][0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]$

15位閏年

^[1-9][0-9][0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]$

身份證號驗證

原文 身份證號驗證 public static boolean isidnumber string idnumber 定義判別使用者身份證號的正規表示式 15位或者18位,最後一位可以為字母 string regularexpression 1 9 d 18 19 20 d 0 1 9 10 11 ...

身份證號驗證

身份證號組成 17位數字 1位校驗碼 位址碼 前六位 出生日期碼 第七位至第十位 順序碼 第十五位至十七位 對同年同月同日生的人便定的順序號,順序號奇數為男生,偶數為女生 檢驗碼 第十八位 0 9 x var acity function iscarid sid d x i.test sid ret...

js 身份證號驗證

function iscardid sid var isum 0 var info if d d x i.test sid return 身份證長度或格式錯誤 sid sid.replace x i,a if acity parseint sid.substr 0,2 null return 身份證...