function isidcardno(idvalue) {
var len=0, re;
len=idvalue.length;
if (len == 15 && isnumberstring(idvalue,"1234567890"))
re = new regexp(/^(d{6})()?(d{2})(d{2})(d{2})(d{3})$/);
else if (len == 18 && isnumberstring(idvalue,"1234567890xx"))
re = new regexp(/^(d{6})()?(d{4})(d{2})(d{2})(d{3})(d)$/);
else {
// alert("輸入的公民身份號碼不合法,請重新輸入!");
return false;
}
var a = idvalue.match(re);
if (a != null){
if (len==15){
var d = new date("19"+a[3]+"/"+a[4]+"/"+a[5]);
var b = d.getyear()==a[3]&&(d.getmonth()+1)==a[4]&&d.getdate()==a[5];
}else{
var d = new date(a[3]+"/"+a[4]+"/"+a[5]);
var b = d.getfullyear()==a[3]&&(d.getmonth()+1)==a[4]&&d.getdate()==a[5];
}
if (!b) {
//alert("輸入的公民身份號碼 "+ a[0] +" 的日期不合法,請重新輸入!");
//alert("輸入的公民身份號碼不合法,請重新輸入!");
return false;
}
}
if(len == 18 && !verifygmsfhlast(idvalue)){
if (idvalue.substr(17,1)=='x'){
//alert("公民身份號碼的最後一位校正碼不正確('x'應為大寫),請檢查!");
}else
{
//alert("輸入的公民身份號碼不合法,請重新輸入!");
}
return false;
}
return true;
}
function verifygmsfhlast(sval){
if(sval.length != 18) return false;
var wi = new array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
var vi = new array(1,0,'x',9,8,7,6,5,4,3,2)
var ai = new array(17);
var sum = 0;
var remaining = 0;
var verifynum = "";
//通過迴圈把18位身份證的前17位存到數組ai中
for(var i = 0; i < 17; i++){
ai[i] = parseint(sval.substring(i,i+1));
}
for(var m = 0; m < ai.length; m++){
//加權
sum = sum + wi[m] * ai[m];
}
remaining = sum % 11;
if(remaining == 2){
verifynum = "x";
}else{
verifynum = vi[remaining];
}
if(verifynum != sval.substring(17,18)){
return false;
}else{
return true;
}
}