如何使用正則表達式驗證身份證號碼格式?

身份證驗證正則表達式應包含18位結構,前6位地址碼,中間8位出生日期,后3位順序碼及最后1位校驗碼,其中校驗碼可為數字或x;常用正則表達式為^d{17}[dxx]$,若需兼容15位可使用^(d{15}$|^d{17}[dxx])$;實際應用時應注意輸入處理前后空格、字母統一大小寫、長度限制、單獨驗證出生日期有效性,并結合代碼實現更嚴格的邏輯判斷。

如何使用正則表達式驗證身份證號碼格式?

身份證號碼驗證是很多系統中常見的需求,比如注冊、實名認證等場景。用正則表達式來驗證格式是最直接也最常用的方法,但要寫得準確并不容易。

如何使用正則表達式驗證身份證號碼格式?

下面是一些實用的建議和思路,幫你寫出靠譜的身份證驗證正則。

如何使用正則表達式驗證身份證號碼格式?


18位身份證號的基本結構

中國大陸的身份證號碼有15位和18位兩種格式,目前主流使用的是18位。它的結構如下:

  • 前6位:地址碼(表示所在地)
  • 中間8位:出生年月日(yyYYMMDD)
  • 接著3位:順序碼(表示同一天出生的人順序)
  • 最后一位:校驗碼(可能是數字或X)

其中最后一位是根據前17位通過特定算法計算出來的,這部分不能靠正則完成,所以正則只能驗證格式是否正確,不能判斷號碼是否真實有效。

如何使用正則表達式驗證身份證號碼格式?


常用正則表達式寫法

一個比較通用的18位身份證正則可以這樣寫:

^d{17}[dXx]$

這個表達式的含義是:

  • ^ 表示開頭
  • d{17} 表示前17位都是數字
  • [dXx] 表示最后一位可以是數字或者大小寫的X
  • $ 表示結尾

如果你還想同時支持15位身份證號碼,可以用這個:

^(d{15}$|^d{17}[dXx])$

不過現在很多系統已經不推薦處理15位了,因為基本都被升級為18位了。


實際使用中的注意事項

在實際開發中,除了寫對正則本身,還要注意以下幾點:

  • 前后空格問題:用戶輸入時可能不小心多打了空格,記得先做一次 trim() 處理。
  • 字母大小寫統一處理:X可以是大寫也可以是小寫,最好在匹配前轉成大寫或小寫,避免出錯。
  • 長度限制:確保輸入長度確實是18位,否則可以直接拒絕。
  • 出生日期有效性:雖然正則無法驗證日期是否真實存在(比如2月30日),但可以在正則之后單獨加邏輯判斷。

結合代碼簡單驗證流程(以JavaScript為例)

function isValidIDCard(id) {   const reg = /^d{17}[dXx]$/;   return reg.test(id); }

當然這只是第一步,如果要做更嚴格的驗證,比如檢查生日是否合法、校驗碼是否正確,就需要額外邏輯配合。


基本上就這些。正則驗證身份證不算復雜,但細節上容易出錯,特別是邊界情況,比如X的位置、長度控制等。只要把結構搞清楚,寫起來其實挺直接的。

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享