- //這個可以驗證15位和18位的身份證,并且包含生日和校驗位的驗證。??? ??
- //如果有興趣,還可以加上身份證所在地的驗證,就是前6位有些數字合法有些數字不合法。 ??
- ??
- function isIdCardNo(num) ??
- {??? ??
- ?????????? num = num.toUpperCase();?? ??
- ????????? //身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最后一位是校驗位,可能為數字或字符X。??? ??
- ?????????? if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)))??? ??
- ?????????? { ??
- ??????????????? alert( '輸入的身份證號長度不對,或者號碼不符合規定!\n15位號碼應全為數字,18位號碼末位可以為數字或X。' ); ??
- ?????????????? return false ; ??
- ????????? } ??
- //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 ??
- //下面分別分析出生日期和校驗位 ??
- var len, re; ??
- len = num.length; ??
- if (len == 15) ??
- { ??
- re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/); ??
- var arrSplit = num.match(re); ??
- ??
- //檢查生日日期是否正確 ??
- var dtmBirth = new Date( '19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]); ??
- var bGoodDay; ??
- bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); ??
- if (!bGoodDay) ??
- { ??
- ?????????? alert( '輸入的身份證號里出生日期不對!' );??? ??
- ??????????? return false ; ??
- } ??
- else ??
- { ??
- //將15位身份證轉成18位 ??
- //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 ??
- ?????????? var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); ??
- ??????????? var arrCh = new Array( '1' , '0' , 'X' , '9' , '8' , '7' , '6' , '5' , '4' , '3' , '2' ); ??
- ??????????? var nTemp = 0, i;??? ??
- ???????????? num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6); ??
- ??????????? for (i = 0; i < 17; i ++) ??
- ?????????? { ??
- ???????????????? nTemp += num.substr(i, 1) * arrInt[i]; ??
- ??????????? } ??
- ??????????? num += arrCh[nTemp % 11];??? ??
- ???????????? return num;??? ??
- }??? ??
- } ??
- if (len == 18) ??
- { ??
- re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/); ??
- var arrSplit = num.match(re); ??
- ??
- //檢查生日日期是否正確 ??
- var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]); ??
- var bGoodDay; ??
- bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); ??
- if (!bGoodDay) ??
- { ??
- alert(dtmBirth.getYear()); ??
- alert(arrSplit[2]); ??
- alert( '輸入的身份證號里出生日期不對!' ); ??
- return false ; ??
- } ??
- else ??
- { ??
- //檢驗18位身份證的校驗碼是否正確。 ??
- //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 ??
- var valnum; ??
- var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); ??
- var arrCh = new Array( '1' , '0' , 'X' , '9' , '8' , '7' , '6' , '5' , '4' , '3' , '2' ); ??
- var nTemp = 0, i; ??
- for (i = 0; i < 17; i ++) ??
- { ??
- nTemp += num.substr(i, 1) * arrInt[i]; ??
- } ??
- valnum = arrCh[nTemp % 11]; ??
- if (valnum != num.substr(17, 1)) ??
- { ??
- alert( '18位身份證的校驗碼不正確!應該為:' + valnum); ??
- return false ; ??
- } ??
- return num; ??
- } ??
- } ??
- return false ; ??
- }?????
//這個可以驗證15位和18位的身份證,并且包含生日和校驗位的驗證。 //如果有興趣,還可以加上身份證所在地的驗證,就是前6位有些數字合法有些數字不合法。 function isIdCardNo(num) { num = num.toUpperCase(); //身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最后一位是校驗位,可能為數字或字符X。 if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) { alert('輸入的身份證號長度不對,或者號碼不符合規定!\n15位號碼應全為數字,18位號碼末位可以為數字或X。'); return false; } //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 //下面分別分析出生日期和校驗位 var len, re; len = num.length; if (len == 15) { re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/); var arrSplit = num.match(re); //檢查生日日期是否正確 var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]); var bGoodDay; bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); if (!bGoodDay) { alert('輸入的身份證號里出生日期不對!'); return false; } else { //將15位身份證轉成18位 //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); var nTemp = 0, i; num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6); for(i = 0; i < 17; i ++) { nTemp += num.substr(i, 1) * arrInt[i]; } num += arrCh[nTemp % 11]; return num; } } if (len == 18) { re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/); var arrSplit = num.match(re); //檢查生日日期是否正確 var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]); var bGoodDay; bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); if (!bGoodDay) { alert(dtmBirth.getYear()); alert(arrSplit[2]); alert('輸入的身份證號里出生日期不對!'); return false; } else { //檢驗18位身份證的校驗碼是否正確。 //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 var valnum; var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); var nTemp = 0, i; for(i = 0; i < 17; i ++) { nTemp += num.substr(i, 1) * arrInt[i]; } valnum = arrCh[nTemp % 11]; if (valnum != num.substr(17, 1)) { alert('18位身份證的校驗碼不正確!應該為:' + valnum); return false; } return num; } } return false; }
2、嚴格的驗證(僅18位):
- <script> ??
- var aCity={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: "國外" } ??
- ??
- function cidInfo(sId){ ??
- var iSum=0 ??
- var info= "" ??
- if (!/^d{17}(d|x)$/i.test(sId)) return false ; ??
- sId=sId.replace(/x$/i, "a" ); ??
- if (aCity[parseInt(sId.substr(0,2))]== null ) return "Error:非法地區" ; ??
- sBirthday=sId.substr(6,4)+ "-" +Number(sId.substr(10,2))+ "-" +Number(sId.substr(12,2)); ??
- var d= new Date(sBirthday.replace(/-/g, "/" )) ??
- if (sBirthday!=(d.getFullYear()+ "-" + (d.getMonth()+1) + "-" + d.getDate())) return "Error:非法生日" ; ??
- for ( var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) ??
- if (iSum%11!=1) return "Error:非法證號" ; ??
- return aCity[parseInt(sId.substr(0,2))]+ "," +sBirthday+ "," +(sId.substr(16,1)%2? "男" : "女" ) ??
- }document.write(cidInfo( "380524198002300016" ), "" ); ??
- document.write(cidInfo( "340524198002300019" ), "" ) ??
- document.write(cidInfo( "340524197711111111" ), "" ) ??
- document.write(cidInfo( "34052419800101001x" ), "" ); ??
- </script>??
<script> var aCity={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:"國外"} function cidInfo(sId){ var iSum=0 var info="" if(!/^d{17}(d|x)$/i.test(sId))return false; sId=sId.replace(/x$/i,"a"); if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地區"; sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2)); var d=new Date(sBirthday.replace(/-/g,"/")) if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日"; for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) if(iSum%11!=1)return "Error:非法證號"; return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女") }document.write(cidInfo("380524198002300016"),""); document.write(cidInfo("340524198002300019"),"") document.write(cidInfo("340524197711111111"),"") document.write(cidInfo("34052419800101001x"),""); </script>
JavaScript表單驗證電話號碼,判斷一個輸入量是否為電話號碼,通過正則表達式實現。
//檢查電話號碼
- function isTel(str){ ??
- ??????? var reg=/^([0-9]|[\-])+$/g ; ??
- ??????? if (str.length<7 || str.length>18){ ??
- ???????? return false ; ??
- ??????? } ??
- ??????? else { ??
- ????????? return reg.exec(str); ??
- ??????? } ??
- }??
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
