function check_cd_card(){
var oTxt=document.getElementById('cd_code');
var CheckIdCard={
//Wi 加權因子 Xi 餘數0~10對應的校驗碼 Pi省份代碼
Wi:[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],
Xi:[1,0,"X",9,8,7,6,5,4,3,2],
Pi:[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],
//檢驗18位身份證號碼出生日期是否有效
//parseFloat過濾前導零,年份必需大於等於1900且小於等於當前年份,用Date()對象判斷日期是否有效。
brithday18:function(sIdCard){
var year=parseFloat(sIdCard.substr(6,4));
var month=parseFloat(sIdCard.substr(10,2));
var day=parseFloat(sIdCard.substr(12,2));
var checkDay=new Date(year,month-1,day);
var nowDay=new Date();
if (1900<=year && year<=nowDay.getFullYear() && month==(checkDay.getMonth()+1) && day==checkDay.getDate()) {
return true;
};
},
//檢驗15位身份證號碼出生日期是否有效
brithday15:function(sIdCard){
var year=parseFloat(sIdCard.substr(6,2));
var month=parseFloat(sIdCard.substr(8,2));
var day=parseFloat(sIdCard.substr(10,2));
var checkDay=new Date(year,month-1,day);
if (month==(checkDay.getMonth()+1) && day==checkDay.getDate()) {
return true;
};
},
//檢驗校驗碼是否有效
validate:function(sIdCard){
var aIdCard=sIdCard.split("");
var sum=0;
for (var i = 0; i < CheckIdCard.Wi.length; i++){
sum+=CheckIdCard.Wi[i]*aIdCard[i]; //線性加權求和
};
var index=sum%11;//求模,可能爲0~10,可求對應的校驗碼是否於身份證的校驗碼匹配
if (CheckIdCard.Xi[index]==aIdCard[17].toUpperCase()) {
return true;
};
},
//檢驗輸入的省份編碼是否有效
province:function(sIdCard){
var p2=sIdCard.substr(0,2);
for (var i = 0; i < CheckIdCard.Pi.length; i++){
if(CheckIdCard.Pi[i]==p2){
return true;
};
};
}
};
var sIdCard=oTxt.value.replace(/^\s+|\s+$/g,"");//去除字符串的前後空格,允許用戶不小心輸入前後空格
if (sIdCard.match(/^\d{14,17}(\d|X)$/gi)==null) {//判斷是否全爲18或15位數字,最後一位可以是大小寫字母X
alert("身份證號碼須爲18位或15位數字"); //允許用戶輸入大小寫X代替羅馬數字的Ⅹ
return false;
}else if (sIdCard.length==18) {
if (CheckIdCard.province(sIdCard)&&CheckIdCard.brithday18(sIdCard)&&CheckIdCard.validate(sIdCard)) {
return true;
}
else{
alert("請輸入有效的身份證號碼");
return false;
};
}else if (sIdCard.length==15) {
if (CheckIdCard.province(sIdCard)&&CheckIdCard.brithday15(sIdCard)) {
return true;
}
else{
alert("請輸入有效的身份證號碼");
return false;
};
};
}