获取字符串中的可能身份证号 并验证
<!DOCTYPE html> <html > <head> <script> function myFunc1(input) { //var id18Pattern=/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/g; //var id15Pattern=/^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$/g; var id18Pattern=/[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]/g; var id15Pattern=/[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]/g; var result=input.match(id18Pattern)||input.match(id15Pattern); if(result) { document.getElementById("output1").innerHTML="字符串包含的可能号码:<br>" for(var j = 0; j < result.length; j++) { document.getElementById("output1").innerHTML += (result[j]); var city={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(!city[result[j].substr(0,2)]){ document.getElementById("output1").innerHTML += (" x"+'<br>'); break; } if(check(result[j])) { document.getElementById("output1").innerHTML += (" √"+'<br>'); } else { document.getElementById("output1").innerHTML += (" x"+'<br>'); } } } else { document.getElementById("output1").value = "请输入15或18位身份证号"; } } function check(code){ code = code.split(''); //∑(ai×Wi)(mod 11) //加权因子 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; var ai = 0; var wi = 0; for (var i = 0; i < 17; i++) { ai = code[i]; wi = factor[i]; sum += ai * wi; } if(parity[sum % 11] != code[17]){ return false; } return true; } </script> </head> <body> ID Number:<input id="input1" type="text" onchange="myFunc1(this.value)" /> <br /> <output id="output1"></output> </body> </html>