身份证正则表达式
1 function checkCardId(socialNo){ 2 3 if(socialNo == "") 4 { 5 alert("输入身份证号码不能为空!"); 6 return (false); 7 } 8 9 if (socialNo.length != 15 && socialNo.length != 18) 10 { 11 alert("输入身份证号码格式不正确!"); 12 return (false); 13 } 14 15 var area={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:"国外"}; 16 17 if(area[parseInt(socialNo.substr(0,2))]==null) { 18 alert("身份证号码不正确(地区非法)!"); 19 return (false); 20 } 21 22 if (socialNo.length == 15) 23 { 24 pattern= /^\d{15}$/; 25 if (pattern.exec(socialNo)==null){ 26 alert("15位身份证号码必须为数字!"); 27 return (false); 28 } 29 var birth = parseInt("19" + socialNo.substr(6,2)); 30 var month = socialNo.substr(8,2); 31 var day = parseInt(socialNo.substr(10,2)); 32 switch(month) { 33 case '01': 34 case '03': 35 case '05': 36 case '07': 37 case '08': 38 case '10': 39 case '12': 40 if(day>31) { 41 alert('输入身份证号码不格式正确!'); 42 return false; 43 } 44 break; 45 case '04': 46 case '06': 47 case '09': 48 case '11': 49 if(day>30) { 50 alert('输入身份证号码不格式正确!'); 51 return false; 52 } 53 break; 54 case '02': 55 if((birth % 4 == 0 && birth % 100 != 0) || birth % 400 == 0) { 56 if(day>29) { 57 alert('输入身份证号码不格式正确!'); 58 return false; 59 } 60 } else { 61 if(day>28) { 62 alert('输入身份证号码不格式正确!'); 63 return false; 64 } 65 } 66 break; 67 default: 68 alert('输入身份证号码不格式正确!'); 69 return false; 70 } 71 var nowYear = new Date().getYear(); 72 if(nowYear - parseInt(birth)<15 || nowYear - parseInt(birth)>100) { 73 alert('输入身份证号码不格式正确!'); 74 return false; 75 } 76 return (true); 77 } 78 79 var Wi = new Array( 80 7,9,10,5,8,4,2,1,6, 81 3,7,9,10,5,8,4,2,1 82 ); 83 var lSum = 0; 84 var nNum = 0; 85 var nCheckSum = 0; 86 87 for (i = 0; i < 17; ++i) 88 { 89 90 91 if ( socialNo.charAt(i) < '0' || socialNo.charAt(i) > '9' ) 92 { 93 alert("输入身份证号码格式不正确!"); 94 return (false); 95 } 96 else 97 { 98 nNum = socialNo.charAt(i) - '0'; 99 } 100 lSum += nNum * Wi[i]; 101 } 102 103 104 if( socialNo.charAt(17) == 'X' || socialNo.charAt(17) == 'x') 105 { 106 lSum += 10*Wi[17]; 107 } 108 else if ( socialNo.charAt(17) < '0' || socialNo.charAt(17) > '9' ) 109 { 110 alert("输入身份证号码格式不正确!"); 111 return (false); 112 } 113 else 114 { 115 lSum += ( socialNo.charAt(17) - '0' ) * Wi[17]; 116 } 117 118 119 120 if ( (lSum % 11) == 1 ) 121 { 122 return true; 123 } 124 else 125 { 126 alert("输入身份证号码格式不正确!"); 127 return (false); 128 } 129 130 }