JavaScript检验身份证号码

xiaoxiao2021-02-28  98

/** * 检验身份证号码<br/> * 15位:ddddddyymmddxxp<br/> * 18位:ddddddyyyymmddxxxy<br/> * @param cardNum 身份证号码 string * @param needAlertError 是否需要弹出错误提示信息 * @return true/false */ function checkIDCardNumber ( cardNum , needAlertError ) { //默认不弹出错误提示信息 needAlertError = !! needAlertError || false ; if ( typeof cardNum != 'string' ) { if ( needAlertError ) { alert ( "参数cardNum格式错误" ); } return false ; } //身份证号码长度为15位或18位 if ( cardNum . length != 15 && cardNum . length != 18 ) { if ( needAlertError ) { alert ( "身份证号码位数不对" ); } return false ; } //15位身份证号码全为数字,18位也全为数字或17位数字,并以字符X结尾 if ( ! /^\d{15}$|(^\d{17}[0-9Xx]$)/ . test ( cardNum )) { if ( needAlertError ) { alert ( "身份证号码含有非法字符" ); } return false ; } // 地址编码 var province = { 11 : "北京" , 12 : "天津" , 13 : "河北" , 14 : "山西" , 15 : "内蒙古" , 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 : "台湾" , 81 : "香港" , 82 : "澳门" , 91 : "国外" }; if ( ! province [ cardNum . substring ( 0 , 2 )]) { if ( needAlertError ) { alert ( "身份证号码地区非法" ); } return false ; } //出生日期 var birthday = cardNum . length == 15 ? ( "19" + cardNum . substring ( 6 , 12 )) : cardNum . substring ( 6 , 14 ); if ( ! /(19)|(20)\d{6}/ . test ( birthday )) { if ( needAlertError ) { alert ( "身份证号码出生日期超出范围或格式错误" ); } return false ; } var year = parseInt ( birthday . substring ( 0 , 4 )); var month = parseInt ( birthday . substring ( 4 , 6 )) - 1 ; var day = parseInt ( birthday . substring ( 6 )); var newBirthday = new Date ( year , month , day ); var formatedBirthday = "" + newBirthday . getFullYear (); formatedBirthday += ( newBirthday . getMonth () < 9 ? "0" : "" ) + ( newBirthday . getMonth () + 1 ); formatedBirthday += ( newBirthday . getDate () < 10 ? "0" : "" ) + newBirthday . getDate (); //身份证中如包含如下格式的日期将不能通过校验:20150230、20150735 if ( birthday != formatedBirthday ) { if ( needAlertError ) { alert ( "身份证号码出生日期超出范围或格式错误" ); } return false ; } //校验位 ∑(ai×Wi)(mod 11) if ( cardNum . length == 18 ) { //加权因子 var factor = [ 7 , 9 , 10 , 5 , 8 , 4 , 2 , 1 , 6 , 3 , 7 , 9 , 10 , 5 , 8 , 4 , 2 ]; //校验位 var parity = [ 1 , 0 , 'X' , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 ]; var sum = 0 ; for ( var i = 0 ; i < 17 ; i ++ ) { sum += cardNum [ i ] * factor [ i ]; } if ( parity [ sum % 11 ] != cardNum [ 17 ]){ if ( needAlertError ) { alert ( "身份证号码校验位错误" ); } return false ; } } return true ; }
转载请注明原文地址: https://www.6miu.com/read-17668.html

最新回复(0)