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

JS身份證信息驗(yàn)證正則表達(dá)式

 更新時(shí)間:2017年06月12日 16:25:03   作者:晴小篆  
很多時(shí)候我們都是通過一組正則表達(dá)式來判斷用戶輸入的身份證是否合法,那在用正則表達(dá)式判斷之前,首先要做到的是對(duì)身份證信息的一些效驗(yàn)規(guī)則

很多時(shí)候我們都是通過一組正則表達(dá)式來判斷用戶輸入的身份證是否合法,那在用正則表達(dá)式判斷之前,首先要做到的是對(duì)身份證信息的一些效驗(yàn)規(guī)則的知曉:

  1、號(hào)碼的結(jié)構(gòu)

    公民身份號(hào)碼是特征組合碼,由十七位數(shù)字本體碼和一位校驗(yàn)碼組成。排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗(yàn)碼。

  2、地址碼(前六位數(shù))

    表示編碼對(duì)象常住戶口所在縣(市、旗、區(qū))的行政區(qū)劃代碼,按gb/T2260的規(guī)定執(zhí)行。

  3、出生日期碼(第七位至十四位)

    表示編碼對(duì)象出生的年、月、日,按gb/T7408的規(guī)定執(zhí)行,年、月、日代碼之間不用分隔符。

  4、順序碼(第十五位至十七位)

    表示在同一地址碼所標(biāo)識(shí)的區(qū)域范圍內(nèi),對(duì)同年、同月、同日出生的人編定的順序號(hào),順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。

  5、校驗(yàn)碼(第十八位數(shù))

    作為尾號(hào)的校驗(yàn)碼,是由號(hào)碼編制單位按統(tǒng)一的公式計(jì)算出來的,如果某人的尾號(hào)是0-9,都不會(huì)出現(xiàn)X,但如果尾號(hào)是10,那么就得用X來代替,因?yàn)槿绻?0做尾號(hào),那么 此人的身份證就變成了19位。X是羅馬數(shù)字的10,用X來代替10,可以保證公民的身份證符合國家標(biāo)準(zhǔn)。

然后開始進(jìn)入正題:

第一步,編寫報(bào)錯(cuò)規(guī)則:

var Errors = new Array("驗(yàn)證通過!", "身份證號(hào)碼位數(shù)不對(duì)!", "身份證號(hào)碼出生日期超出范圍或含有非法字符!", "身份證號(hào)碼校驗(yàn)錯(cuò)誤!", "身份證地區(qū)非法!");              

第二步,定義一個(gè)全國匹配的對(duì)象:

var area = { 
        11: "北京", 
        12: "天津", 
        13: "河北", 
        14: "山西", 
        15: "內(nèi)蒙古", 
        21: "遼寧", 
        22: "吉林", 
        23: "黑龍江", 
        31: "上海", 
        32: "江蘇", 
        33: "浙江", 
        34: "安徽", 
        35: "福建", 
        36: "江西", 
        37: "山東", 
        41: "河南", 
        42: "湖北", 
        43: "湖南", 
        44: "廣東", 
        45: "廣西", 
        46: "海南", 
        50: "重慶", 
        51: "四川", 
        52: "貴州", 
        53: "云南", 
        54: "西藏", 
        61: "陜西", 
        62: "甘肅", 
        63: "青海", 
        64: "寧夏", 
        65: "新疆", 
        71: "臺(tái)灣", 
        81: "香港", 
        82: "澳門", 
        91: "國外" 
      } 

第三步,定義分別定義15位身份證和18位身份中的效驗(yàn)規(guī)則:

switch (idcard.length) { 
        case 15: 
          if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) { 
            ereg = /^[1-9][0-9]{5}19[0-9]{2}((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]{3}$/; //測(cè)試出生日期的合法性 
          } else { 
            ereg = /^[1-9][0-9]{5}19[0-9]{2}((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]{3}$/; //測(cè)試出生日期的合法性 
          } 
          if (ereg.test(idcard)) { 
            return Errors[0]; 
          } 
          else { 
            return Errors[2]; 
          } 
          break; 
        case 18: 
          if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0)) { 
            ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((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]{3}[0-9Xx]$/; //閏年出生日期的合法性正則表達(dá)式 
          } else { 
            ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((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]{3}[0-9Xx]$/; //平年出生日期的合法性正則表達(dá)式 
          } 
          if (ereg.test(idcard)) { //測(cè)試出生日期的合法性 
            //計(jì)算校驗(yàn)位 
            S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + parseInt(idcard_array[7]) * 1 + parseInt(idcard_array[8]) * 6 + parseInt(idcard_array[9]) * 3; 
            Y = S % 11; 
            M = "F"; 
            JYM = "10X98765432"; 
            M = JYM.substr(Y, 1); //判斷校驗(yàn)位 
            if (M == idcard_array[17]) return Errors[0]; //檢測(cè)ID的校驗(yàn)位 
            else return Errors[3]; 
          } else return Errors[2]; 
          break; 
        default: 
          return Errors[1]; 
          break; 
      } 

最終版本:

function checkId(idcard) { 
      var Errors = new Array("驗(yàn)證通過!", "身份證號(hào)碼位數(shù)不對(duì)!", "身份證號(hào)碼出生日期超出范圍或含有非法字符!", "身份證號(hào)碼校驗(yàn)錯(cuò)誤!", "身份證地區(qū)非法!"); 
      var area = { 
        11: "北京", 
        12: "天津", 
        13: "河北", 
        14: "山西", 
        15: "內(nèi)蒙古", 
        21: "遼寧", 
        22: "吉林", 
        23: "黑龍江", 
        31: "上海", 
        32: "江蘇", 
        33: "浙江", 
        34: "安徽", 
        35: "福建", 
        36: "江西", 
        37: "山東", 
        41: "河南", 
        42: "湖北", 
        43: "湖南", 
        44: "廣東", 
        45: "廣西", 
        46: "海南", 
        50: "重慶", 
        51: "四川", 
        52: "貴州", 
        53: "云南", 
        54: "西藏", 
        61: "陜西", 
        62: "甘肅", 
        63: "青海", 
        64: "寧夏", 
        65: "新疆", 
        71: "臺(tái)灣", 
        81: "香港", 
        82: "澳門", 
        91: "國外" 
      } 
      var retflag = false; 
      var idcard, Y, JYM; 
      var S, M; 
      var idcard_array = new Array(); 
      idcard_array = idcard.split(""); 
      //地區(qū)檢驗(yàn) 
      if (area[parseInt(idcard.substr(0, 2))] == null) return Errors[4]; 
      //身份號(hào)碼位數(shù)及格式檢驗(yàn) 
      switch (idcard.length) { 
        case 15: 
          if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) { 
            ereg = /^[1-9][0-9]{5}19[0-9]{2}((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]{3}$/; //測(cè)試出生日期的合法性 
          } else { 
            ereg = /^[1-9][0-9]{5}19[0-9]{2}((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]{3}$/; //測(cè)試出生日期的合法性 
          } 
          if (ereg.test(idcard)) { 
            return Errors[0]; 
          } 
          else { 
            return Errors[2]; 
          } 
          break; 
        case 18: 
          if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0)) { 
            ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((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]{3}[0-9Xx]$/; //閏年出生日期的合法性正則表達(dá)式 
          } else { 
            ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((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]{3}[0-9Xx]$/; //平年出生日期的合法性正則表達(dá)式 
          } 
          if (ereg.test(idcard)) { //測(cè)試出生日期的合法性 
            //計(jì)算校驗(yàn)位 
            S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + parseInt(idcard_array[7]) * 1 + parseInt(idcard_array[8]) * 6 + parseInt(idcard_array[9]) * 3; 
            Y = S % 11; 
            M = "F"; 
            JYM = "10X98765432"; 
            M = JYM.substr(Y, 1); //判斷校驗(yàn)位 
            if (M == idcard_array[17]) return Errors[0]; //檢測(cè)ID的校驗(yàn)位 
            else return Errors[3]; 
          } else return Errors[2]; 
          break; 
        default: 
          return Errors[1]; 
          break; 
      } 
    }; 

最后直接調(diào)用方法就行了,回返回校驗(yàn)結(jié)果。

以上所述是小編給大家介紹的JS前端身份證信息驗(yàn)證正則表達(dá)式,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Ionic快速安裝教程

    Ionic快速安裝教程

    Ionic 是目前最有潛力的一款 HTML5 手機(jī)應(yīng)用開發(fā)框架。通過 SASS 構(gòu)建應(yīng)用程序,它 提供了很多 UI 組件來幫助開發(fā)者開發(fā)強(qiáng)大的應(yīng)用。接下來小編給大家介紹如何安裝 Ionic 在自己的電腦上搭建一個(gè)簡單的小應(yīng)用,感興趣的朋友一起看看吧
    2016-06-06
  • Bootstrap打造一個(gè)左側(cè)折疊菜單的系統(tǒng)模板(二)

    Bootstrap打造一個(gè)左側(cè)折疊菜單的系統(tǒng)模板(二)

    這篇文章主要介紹了Bootstrap打造一個(gè)左側(cè)折疊菜單的系統(tǒng)模板(二)的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • 前端算法題解leetcode114二叉樹展開為鏈表

    前端算法題解leetcode114二叉樹展開為鏈表

    這篇文章主要為大家介紹了前端算法題解leetcode114二叉樹展開為鏈表,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 基于JavaScript操作DOM常用的API小結(jié)

    基于JavaScript操作DOM常用的API小結(jié)

    DOM(Document Object Model)即文檔對(duì)象模型,針對(duì) HTML 和 XML 文檔的 API(應(yīng)用程序接口)。本篇文章給大家介紹javascript操作dom常用的api小結(jié),對(duì)javascript dom api相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • 淺析JavaScript中的同名標(biāo)識(shí)符優(yōu)先級(jí)

    淺析JavaScript中的同名標(biāo)識(shí)符優(yōu)先級(jí)

    這篇文章主要介紹了JavaScript中的同名標(biāo)識(shí)符優(yōu)先級(jí)。需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-12-12
  • 論JavaScript模塊化編程

    論JavaScript模塊化編程

    這篇文章主要介紹了論JavaScript模塊化編程,感興趣的小伙伴們可以參考一下
    2016-03-03
  • JavaScript創(chuàng)建對(duì)象的方式小結(jié)(4種方式)

    JavaScript創(chuàng)建對(duì)象的方式小結(jié)(4種方式)

    這篇文章主要介紹了JavaScript創(chuàng)建對(duì)象的方式,結(jié)合實(shí)例形式總結(jié)分析了四種創(chuàng)建對(duì)象的方式,并附帶分析了JavaScript對(duì)象復(fù)制的技巧,需要的朋友可以參考下
    2015-12-12
  • 由?JavaScript?的?with?引發(fā)的探索

    由?JavaScript?的?with?引發(fā)的探索

    這篇文章主要介紹了由?JavaScript?的?with?引發(fā)的探索,js?的?with?是為對(duì)象訪問提供命名空間式的訪問方式,with?創(chuàng)建一個(gè)對(duì)象的命名空間,在這個(gè)命名空間內(nèi)你可以直接訪問對(duì)象的屬性,而不需要通過對(duì)象來訪問,下面一起來了解更多詳細(xì)內(nèi)容吧
    2022-01-01
  • JS當(dāng)前屬性查詢實(shí)現(xiàn)代碼

    JS當(dāng)前屬性查詢實(shí)現(xiàn)代碼

    JS中的for in 可遍歷變量的所有屬性!利用此特性制作了一個(gè)JS當(dāng)前屬性查詢!
    2010-12-12
  • Javascript中的高階函數(shù)介紹

    Javascript中的高階函數(shù)介紹

    這篇文章主要介紹了Javascript中的高階函數(shù)介紹,本文講解了什么是高階函數(shù)、Javascript的高階函數(shù)、還原高階函數(shù)、高階函數(shù)使用實(shí)例等內(nèi)容,需要的朋友可以參考下
    2015-03-03

最新評(píng)論

华亭县| 获嘉县| 武鸣县| 阿合奇县| 芜湖市| 贵港市| 射阳县| 南华县| 神木县| 红原县| 汤阴县| 伊宁县| 新密市| 军事| 镇坪县| 长泰县| 丰宁| 沛县| 桃园市| 保亭| 普宁市| 康平县| 秭归县| 吉木萨尔县| 汝阳县| 花莲县| 青浦区| 泗洪县| 桂阳县| 沾益县| 融水| 淮安市| 阜宁县| 慈溪市| 北碚区| 增城市| 璧山县| 静宁县| 唐海县| 普兰县| 玛多县|