最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript前端實現身份證號校驗

 更新時間:2025年09月29日 09:54:20   作者:蜚鳴  
這篇文章主要為大家詳細介紹了JavaScript前端實現身份證號校驗的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

身份證號校驗規(guī)則

身份證號碼的校驗主要基于國家標準GB11643-1999,18位身份證號的最后一位是校驗碼,通過前17位計算得出。校驗算法分為以下幾個部分:

校驗碼計算方法

1.加權因子

前17位數字分別乘以對應的加權因子,加權因子為固定值:

[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]

2.計算加權和

將前17位數字與加權因子逐位相乘,再將結果相加,得到加權和 S。

3.取模計算

用加權和 S 除以11,取余數 Y = S % 11。

4.校驗碼對應表

根據余數 Y 的值,從下表查找對應的校驗碼:

[1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2]

校驗碼為第 Y 位的字符(從0開始)。

實現代碼

function validateIDCard(idCard) {
    // 基本格式校驗
    if (!/^\d{17}[\dXx]$/.test(idCard)) {
        return false;
    }

    // 加權因子
    const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    // 校驗碼對應表
    const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];

    // 計算加權和
    let sum = 0;
    for (let i = 0; i < 17; i++) {
        sum += parseInt(idCard.charAt(i)) * weights[i];
    }

    // 計算校驗碼
    const mod = sum % 11;
    const checkCode = checkCodes[mod];

    // 校驗最后一位
    return idCard.charAt(17).toUpperCase() === checkCode;
}

其他校驗規(guī)則

1.行政區(qū)劃碼校驗

前6位是行政區(qū)劃碼,需符合國家行政區(qū)劃編碼規(guī)則(可通過公開的行政區(qū)劃代碼表校驗)。

2.出生日期校驗

第7-14位是出生日期,需為合法日期(如月份在1-12之間,日期符合當月天數)。

3.順序碼校驗

第15-17位是順序碼,奇數表示男性,偶數表示女性。

完整校驗函數

function fullValidateIDCard(idCard) {
    // 基本格式校驗
    if (!/^\d{17}[\dXx]$/.test(idCard)) {
        return false;
    }

    // 校驗行政區(qū)劃碼(示例:僅校驗前2位為省級代碼)
    const provinceCode = idCard.substring(0, 2);
    if (parseInt(provinceCode) > 91 || parseInt(provinceCode) < 11) {
        return false;
    }

    // 校驗出生日期
    const birthDate = idCard.substring(6, 14);
    const year = parseInt(birthDate.substring(0, 4));
    const month = parseInt(birthDate.substring(4, 6));
    const day = parseInt(birthDate.substring(6, 8));
    const date = new Date(year, month - 1, day);
    if (
        date.getFullYear() !== year ||
        date.getMonth() + 1 !== month ||
        date.getDate() !== day
    ) {
        return false;
    }

    // 校驗校驗碼
    return validateIDCard(idCard);
}

知識擴展

JavaScript實現中國手機號校驗

1.校驗手機號的基本規(guī)則

中國大陸手機號為11位數字,通常以特定號段開頭。常見號段包括:

  • 移動:134、135、136、137、138、139、147、150、151、152、157、158、159、172、178、182、183、184、187、188、198
  • 聯通:130、131、132、145、155、156、166、171、175、176、185、186
  • 電信:133、149、153、173、177、180、181、189、199
  • 虛擬運營商:170、171

2.正則表達式校驗方法

使用正則表達式進行簡單校驗:

function isPhoneNumber(phone) {
  return /^1[3-9]\d{9}$/.test(phone);
}

更精確的號段校驗:

function isPhoneNumberStrict(phone) {
  return /^1(3[0-9]|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/.test(phone);
}

3.分段校驗方法

如果需要更精確的校驗,可以將號段拆分為數組:

const segments = [
  // 移動
  '134','135','136','137','138','139','147','150','151','152',
  '157','158','159','172','178','182','183','184','187','188','198',
  // 聯通
  '130','131','132','145','155','156','166','171','175','176','185','186',
  // 電信
  '133','149','153','173','177','180','181','189','199'
];
 
function isPhoneNumberSegment(phone) {
  if (!/^1\d{10}$/.test(phone)) return false;
  return segments.includes(phone.substring(0, 3));
}

4.國際化考慮

對于國際手機號校驗,可以使用更通用的正則表達式:

function isInternationalPhone(phone) {
  return /^\+?[1-9]\d{1,14}$/.test(phone);
}

4.實際應用建議

在實際項目中,建議:

  • 前端進行簡單格式校驗
  • 后端進行更嚴格的校驗
  • 通過短信驗證碼進行最終驗證

5.前端完整校驗示例:

function validatePhone(phone) {
  const cleaned = phone.replace(/\D/g, '');
  if (!/^1\d{10}$/.test(cleaned)) return false;
  
  const segment = cleaned.substring(0, 3);
  const segments = [
    '130','131','132','133','134','135','136','137','138','139',
    '145','147','149','150','151','152','153','155','156','157',
    '158','159','166','170','171','172','173','175','176','177',
    '178','180','181','182','183','184','185','186','187','188',
    '189','198','199'
  ];
  
  return segments.includes(segment);
}

注意事項

  • 15位身份證號無校驗碼,需升級為18位后再校驗。
  • 行政區(qū)劃碼和出生日期校驗需結合實際需求補充完整邏輯。
  • 校驗碼計算區(qū)分大小寫(X 必須大寫)。

到此這篇關于JavaScript前端實現身份證號校驗的文章就介紹到這了,更多相關JavaScript身份證號校驗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

安丘市| 林口县| 城口县| 安新县| 临西县| 高清| 清丰县| 陆丰市| 汤阴县| 县级市| 格尔木市| 北票市| 甘肃省| 丹巴县| 武乡县| 同心县| 上栗县| 扎囊县| 抚宁县| 万年县| 南靖县| 大埔县| 普格县| 文化| 沂南县| 邵阳市| 巴东县| 大化| 通河县| 将乐县| 新沂市| 常熟市| 晋州市| 通海县| 共和县| 闵行区| 新闻| 罗城| 工布江达县| 平昌县| 永康市|