js身份證校驗詳解

一、js身份證校驗規則

身份證是中國公民的唯一身份證明,使用十分廣泛。而身份證中包含的信息也十分重要。因此,根據身份證號碼的一定規則進行身份證校驗就顯得尤為重要。

在中國,每個身份證號碼由18位數字組成。前17位是地區、出生年月日、順序號,最後一位是校驗位。其中順序號是按照性別分別奇偶存儲。校驗位的計算是根據前17位數字的加權算法計算的。

二、js身份證正則驗證

在js中,可以通過正則表達式進行身份證號碼的校驗。下面是一個簡單的正則表達式,用於驗證身份證號碼是否合法:

function isChinaIDCard(str) {
    var regExp = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    return regExp.test(str);
}

該正則表達式中,使用了三個組合正則表達式進行身份證號碼的匹配。其中,模式1匹配15位身份證號碼,模式2匹配18位身份證號碼,模式3匹配18位身份證號碼(最後一位可能是「X」)。如果身份證號碼符合以上三種模式之一,就表明身份證號碼合法。

三、js身份證識別掃描

使用掃描儀可以快速地識別身份證號碼。如果需要從圖片中獲取身份證號碼,可以通過以下步驟:

  1. 使用JavaScript的Image對象加載圖片;
  2. 將圖片轉換為Canvas元素;
  3. 從Canvas元素中提取圖像數據;
  4. 對圖像數據進行分析,識別身份證號碼。

四、js身份證正則表達式

身份證號碼的校驗需要用到正則表達式。在JavaScript中,可以使用正則表達式進行字符串匹配。例如,校驗身份證號碼的正則表達式可以表示成:

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

該正則表達式中,使用了以下規則:

  • 第1-6位表示區域,由非零數字開頭;
  • 第7-10位表示出生年份,由非零數字開頭;
  • 第11-12位表示出生月份,由01~12月格式表示;
  • 第13-14位表示出生日期,由01~31日格式表示;
  • 第15-17位表示順序號,奇數表示男性,偶數表示女性;
  • 第18位表示校驗碼,是根據前17位數字根據ISO 7064:1983.MOD11-2校驗碼計算出的。

五、js校驗身份證是否合法

js中可以添加函數來校驗身份證是否合法。下面是一個校驗身份證是否合法的函數:

function isChinaIDCard(str) {
    var chinaIDCardRegExp = /^[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])([012]\d|3[01])\d{3}[0-9X]$/;
    if (!chinaIDCardRegExp.test(str)) {
        return false;
    }
    // Verify the check digit
    var i, lastDigit, total = 0;
    var numbers = str.split('');
    for (i = 0; i < 17; i++) {
        total += parseInt(numbers[i], 10) * ((Math.pow(2, 17 - i)) % 11);
    }
    lastDigit = (12 - total % 11) % 11;
    if (lastDigit === 10) {
        lastDigit = 'X';
    }
    return lastDigit.toString() === numbers[17].toUpperCase();
}

該函數中首先調用正則表達式判斷是否符合18位身份證號碼的規則,之後再使用ISO 7064:1983.MOD11-2校驗碼算法進行校驗最後一位校驗碼。

六、js身份證驗證正則表達式

js中內置了正則表達式對象RegExp,可以方便地使用正則表達式進行身份證校驗。下面是一個使用RegExp對象的示例:

function isChinaIDCard(str) {
    var re = new RegExp('^[1-9]\\d{5}(19|20)\\d{2}(0[1-9]|1[0-2])([0-2][1-9]|[1-3][0-1])\\d{3}([0-9]|X)$');
    return re.test(str);
}

該函數中使用了RegExp對象來創建一個身份證號碼驗證的正則表達式,其中使用了以下規則:

  • 第1-6位表示區域,由非零數字開頭;
  • 第7-10位表示出生年份,由非零數字開頭;
  • 第11-12位表示出生月份,由01~12月格式表示;
  • 第13-14位表示出生日期,由01~31日格式表示;
  • 第15-17位表示順序號,奇數表示男性,偶數表示女性;
  • 第18位表示校驗碼,是根據前17位數字根據ISO 7064:1983.MOD11-2校驗碼計算出的。

七、js調用身份證讀卡器

如果需要在web端調用身份證讀卡器進行身份證的讀取驗證,可以使用ActiveX組件實現。下面是一個簡單的示例:

function readIDCard() {
    var idCard = "";
    try {
        var IDCard = new ActiveXObject("ZYSoft.IDCardVerify.1");
        idCard = IDCard.ReadCard();
    } catch (e) {
        alert(e.message);
    }
    return idCard;
}

該函數使用了ActiveX組件「ZYSoft.IDCardVerify.1」,該組件可以讀取身份證信息並返回讀取的身份證號碼。需要注意的是,該組件只能在IE瀏覽器中使用。

八、js判斷身份證是否正確

在身份證號碼的校驗中,除了校驗碼計算之外,還需要針對身份證中各個字段進行判斷。下面是一個判斷身份證是否合法的示例:

function isChinaIDCard(str) {
    var chinaIDCardRegExp = /^[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])([012]\d|3[01])\d{3}[0-9X]$/;
    if (!chinaIDCardRegExp.test(str)) {
        return false;
    }
    // Verify the check digit
    var i, lastDigit, total = 0;
    var numbers = str.split('');
    for (i = 0; i < 17; i++) {
        total += parseInt(numbers[i], 10) * ((Math.pow(2, 17 - i)) % 11);
    }
    lastDigit = (12 - total % 11) % 11;
    if (lastDigit === 10) {
        lastDigit = 'X';
    }
    if (lastDigit.toString() !== numbers[17].toUpperCase()) {
        return false;
    }
    // Verify the birth date
    var year, month, day, birthday;
    if (numbers.length === 18) {
        year = numbers.substr(6, 4);
        month = numbers.substr(10, 2);
        day = numbers.substr(12, 2);
        birthday = new Date(year, month - 1, day);
        if (birthday.getFullYear() != year ||
            birthday.getMonth() + 1 != month ||
            birthday.getDate() != day) {
            return false;
        }
    } else if (numbers.length === 15) {
        year = "19" + numbers.substr(6, 2);
        month = numbers.substr(8, 2);
        day = numbers.substr(10, 2);
        birthday = new Date(year, month - 1, day);
        if (birthday.getYear() != year ||
            birthday.getMonth() + 1 != month ||
            birthday.getDate() != day) {
            return false;
        }
    }
    // Verify the Gender
    var gender = parseInt(numbers.substr(16, 1), 10) % 2 === 1 ? "男" : "女";
    return true;
}

該函數中,在校驗碼計算完成後,還使用了以下規則進行校驗:

  • 身份證中出生年月日格式是否正確;
  • 身份證中第17位是否正確表示性別。

九、js判斷身份證性別代碼

在身份證號碼中,順序號的最後一位表示性別。奇數表示男性,偶數表示女性。下面是一個根據身份證號碼獲取性別的示例:

function getChinaIDCardGender(str) {
    var genderCode = str.charAt(16);
    return genderCode % 2 === 1 ? "男" : "女";
}

該函數中,先獲取身份證最後一位順序號,之後分別判斷該數字是否為奇數或偶數,從而判斷身份證持有者的性別。

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

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

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • JS圖片沿着SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿着SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27
  • 如何反混淆美團slider.js

    本文將從多個方面詳細闡述如何反混淆美團slider.js。在開始之前,需要明確的是,混淆是一種保護JavaScript代碼的方法,其目的是使代碼難以理解和修改。因此,在進行反混淆操…

    編程 2025-04-27
  • Python要學JS嗎?

    Python和JavaScript都是非常受歡迎的編程語言。然而,你可能會問,既然我已經學了Python,是不是也需要學一下JS呢?在本文中,我們將圍繞這個問題進行討論,並從多個角…

    編程 2025-04-27
  • 解決js ajax post 419問題

    對於使用ajax post請求時出現的419問題,我們需要進行以下幾個方面的闡述,包括返回碼的含義、可能出現的情況、解決方案等內容。 一、解析419返回碼 419返回碼錶示用戶超時…

    編程 2025-04-27
  • Python輸入身份證判斷地區

    在Python中,我們可以通過簡單的代碼來驗證身份證號碼的合法性,同時也可以從中提取出身份證所屬的地區信息。 一、驗證身份證號碼的合法性 身份證號碼是一個18位的字符串,其中最後一…

    編程 2025-04-27

發表回復

登錄後才能評論