深入解析身份證號正則表達式,全面掌握身份證號碼驗證規則

在實際項目中,身份證號碼的驗證是一個很常見的需求。而用正則表達式進行身份證號碼的驗證,是一種快捷、方便、且效果好的方法。本文從多個方面來深入解析身份證號正則表達式,並全面掌握身份證號碼驗證規則,以方便大家在實際開發中快速進行身份證號碼的驗證。

一、正則表達式的基礎知識

正則表達式是用來描述字符串模式的一種工具,可以用來匹配、查找、替換字符串中的模式。在正則表達式中,常用的元字符有:

1. “.” – 匹配除換行符以外的任意字符
2. “^” – 匹配行首
3. “$” – 匹配行尾
4. “*” – 匹配前面的字符零次或多次
5. “+” – 匹配前面的字符一次或多次
6. “?” – 匹配前面的字符零次或一次
7. “[]” – 匹配一個字符集,比如[abc]匹配a或b或c
8. “[^]” – 匹配非字符集中的任意字符
9. “{}” – 匹配一個範圍數量的字符,比如a{3,5}匹配aaa、aaaa、aaaaa

二、驗證身份證號碼的基本規則

在驗證身份證號碼的正則表達式中,需要考慮到身份證號碼的基本規則。身份證號碼由18個字符組成,由前17位數字和最後一位的校驗位組成。其中,前6位數字為行政區劃代碼,接下來8位數字為出生日期碼,後4位為順序碼和最後一位為校驗位。出生日期碼的格式為YYYYMMDD,例如19990101代表1999年1月1日。

而根據國家標準GB11643-1999《公民身份號碼》的規定,身份證號碼的校驗位的計算方法如下:

1. 將前17位數字乘上對應的係數,係數分別為:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2
2. 將乘積相加的和對11取餘數,得到餘數是0~10中的一個數
3. 根據餘數找到對應的校驗位,規則如下:

– 0:1
– 1:0
– 2:X
– 3:9
– 4:8
– 5:7
– 6:6
– 7:5
– 8:4
– 9:3
– 10:2

因此,根據身份證號碼的基本規則和校驗位的計算方法,可以得到如下的身份證號碼的正則表達式:

/^([1-9]\d{5})((19\d{2})|(20\d{2}))((0\d)|(1[0-2]))(([0-2]\d)|3[01])\d{3}([0-9]|X)$/

三、身份證號碼正則表達式的解析

在上述的身份證號碼的正則表達式中,有許多的細節需要注意,下面將一一進行解析,以便更好地掌握身份證號碼的驗證規則。

首先,正則表達式以”/”開頭和結尾,表示這是一個正則表達式。

/^([1-9]\d{5})((19\d{2})|(20\d{2}))((0\d)|(1[0-2]))(([0-2]\d)|3[01])\d{3}([0-9]|X)$/

緊接着,”^”表示字符串的開頭,”([1-9]\d{5})”表示匹配前6位行政區劃代碼,”([1-9]”表示第一位數字不為0,”\d{5})”表示後面5位數字可以為0~9中任意一個數字。

“((19\d{2})|(20\d{2}))”表示匹配年份,”(“和”)”用來將19\d{2}和20\d{2}分組,”|”表示或的關係。”\d”代表數字,”{2}”表示兩位數字。

“((0\d)|(1[0-2]))”表示匹配月份,”0\d”表示1~9月份,”1[0-2]”表示10~12月份。”(“和”)”用來將0\d和1[0-2]分組,”|”表示或的關係。

“(([0-2]\d)|3[01])”表示匹配日期,”[0-2]\d”表示01~29日,”3[01]”表示30~31日,”(“和”)”用來將[0-2]\d和3[01]分組,”|”表示或的關係。

“\d{3}”表示結合了年月日的後8位,可以為0~9中任意一個數字,共三位。

“([0-9]|X)$”表示校驗位的匹配,最後一位數字可以為0~9中任意一個數字或者大寫字母X,”$”表示字符串的結尾。

四、身份證號碼的校驗方法

在實際應用中,驗證身份證號碼的方法如下:

1. 根據正則表達式驗證身份證號碼是否符合規則
2. 如果符合規則,計算校驗位並進行比對
3. 如果校驗位匹配,則表明身份證號碼是正確的

下面是對驗證方法的代碼實現:

function validateIdNumber(idNumber) {
    var regex = /^([1-9]\d{5})((19\d{2})|(20\d{2}))((0\d)|(1[0-2]))(([0-2]\d)|3[01])\d{3}([0-9]|X)$/;
    if(!regex.test(idNumber)) {
        return false;
    }
    var factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    var sum = 0;
    for(var i = 0; i < factors.length; i++) {
        sum += parseInt(idNumber[i]) * factors[i];
    }
    var checkDigit = (12 - sum % 11) % 11;
    var checkDigitDict = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];
    if(idNumber[17] == checkDigitDict[checkDigit]) {
        return true;
    }
    return false;
}

五、總結

在本文中,我們詳細介紹了身份證號碼正則表達式的基礎知識、驗證規則、正則表達式的解析和驗證身份證號碼的校驗方法。正則表達式雖然難以理解,但是掌握了其規則和特點,可以幫助我們快速、準確地完成身份證號碼的驗證。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/199827.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-05 14:01
下一篇 2024-12-05 14:01

相關推薦

  • 如何通過身份證號碼判斷性別?

    如果您想知道如何通過身份證號碼判斷性別,我們將在本文中為您提供全面的解決方案。 一、身份證號碼構成 中國公民的身份證號碼由18位數字組成,前17位是個人信息碼,最後一位是校驗碼。其…

    編程 2025-04-29
  • 解析URI編碼規則

    URI(統一資源標識符)是用來標識互聯網上資源的字符串文本標識符,是訪問互聯網資源的地址。在將URI傳送到服務器或瀏覽器時,需要進行特定編碼處理,這個編碼方式就是URI編碼規則。 …

    編程 2025-04-28
  • Python編寫規則用法介紹

    Python作為一種廣泛使用的高級編程語言,其編寫規則的規範性對於提高代碼可讀性、美觀度以及方便調試、維護至關重要。本文將從命名規則、注釋規則、代碼縮進等多個方面進行詳細的闡述,希…

    編程 2025-04-28
  • Python縮進規則用法介紹

    本文將從多個方面對Python的縮進規則進行詳細的闡述。 一、規則解答 Python中縮進是語法的一部分,它決定了程序的結構和邏輯。Python縮進規則要求同一層級的代碼必須保持相…

    編程 2025-04-28
  • Python提取身份證號碼的年月日和性別代碼

    本文將從以下幾個方面對Python提取身份證號碼的年月日和性別代碼進行詳細闡述。代碼示例見下文。 一、Python計算身份證號碼中的生日 身份證號碼中前6位為出生年月日信息,其中前…

    編程 2025-04-28
  • 深入解析Vue3 defineExpose

    Vue 3在開發過程中引入了新的API `defineExpose`。在以前的版本中,我們經常使用 `$attrs` 和` $listeners` 實現父組件與子組件之間的通信,但…

    編程 2025-04-25
  • 深入理解byte轉int

    一、位元組與比特 在討論byte轉int之前,我們需要了解位元組和比特的概念。位元組是計算機存儲單位的一種,通常表示8個比特(bit),即1位元組=8比特。比特是計算機中最小的數據單位,是…

    編程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什麼是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一個內置小部件,它可以監測數據流(Stream)中數據的變…

    編程 2025-04-25
  • 深入探討OpenCV版本

    OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實…

    編程 2025-04-25
  • 深入了解scala-maven-plugin

    一、簡介 Scala-maven-plugin 是一個創造和管理 Scala 項目的maven插件,它可以自動生成基本項目結構、依賴配置、Scala文件等。使用它可以使我們專註於代…

    編程 2025-04-25

發表回復

登錄後才能評論