﻿function isChinaIDCard(sNo)
{

	sNo = sNo.toString()
    if (sNo.length==18)
    {
         var a,b,c
         if (!isInteger(sNo.substr(0,17))) {return false}
         a=parseInt(sNo.substr(0,1))*7+parseInt(sNo.substr(1,1))*9+parseInt(sNo.substr(2,1))*10;
         a=a+parseInt(sNo.substr(3,1))*5+parseInt(sNo.substr(4,1))*8+parseInt(sNo.substr(5,1))*4;
         a=a+parseInt(sNo.substr(6,1))*2+parseInt(sNo.substr(7,1))*1+parseInt(sNo.substr(8,1))*6; 
         a=a+parseInt(sNo.substr(9,1))*3+parseInt(sNo.substr(10,1))*7+parseInt(sNo.substr(11,1))*9;  
         a=a+parseInt(sNo.substr(12,1))*10+parseInt(sNo.substr(13,1))*5+parseInt(sNo.substr(14,1))*8; 
         a=a+parseInt(sNo.substr(15,1))*4+parseInt(sNo.substr(16,1))*2;
         b=a%11;
         if (b==2)
         {
              c=sNo.substr(17,1).toUpperCase();
         }
         else
         {
              c=parseInt(sNo.substr(17,1));
         }
         switch(b)
         {
              case 0: if ( c!=1 ) {return false;}break;
              case 1: if ( c!=0 ) {return false;}break;
              case 2: if ( c!="X") {return false;}break;
              case 3: if ( c!=9 ) {return false;}break;
              case 4: if ( c!=8 ) {return false;}break;
              case 5: if ( c!=7 ) {return false;}break;
              case 6: if ( c!=6 ) {return false;}break;
              case 7: if ( c!=5 ) {return false;}break;
              case 8: if ( c!=4 ) {return false;}break;
              case 9: if ( c!=3 ) {return false;}break;
              case 10: if ( c!=2 ){return false;}
         }
     }
     else
     {
         if (!isInteger(sNo)) {return false;} 
     }
     switch(sNo.length){
         case 15: if (isValidDate(sNo.substr(6,2),sNo.substr(8,2),sNo.substr(10,2))) {return true}
         case 18: if (isValidDate(sNo.substr(6,4),sNo.substr(10,2),sNo.substr(12,2))) {return true}
         }
     return false;
}

function isInteger(sNum) {
	var	num;
	num=new RegExp('[^0-9_]','')
	if (isNaN(sNum)) {
		return false
	}
	else {
		if (sNum.search(num)>=0) {
			return false
		}
		else {
			return true
		}
	}
}
function isValidDate(iY, iM, iD) 

{ 

     var undefined                                      

     if ( iY != undefined && !isNaN(iY) && iY >=0 && iY<=9999 &&                         

     iM != undefined && !isNaN(iM) && iM >=1   && iM<=12   &&                       

     iD != undefined && !isNaN(iD) && iD >=1   && iD<=31  )  

     {                      

     if (iY<5) return (false);

     else if (iY<50) iY = 2000+iY; 

     else if (iY<100) iY=1900+iY;                            

     

     if (iM == 2  && (isLeapYear(iY)  && iD > 29 || !isLeapYear(iY) && iD>28) ||    

     iD == 31 && (iM<7 && iM%2==0 || iM>7 && iM%2==1) )                             

         return false                                                                        

     else return true      }                                                             

     else  return false 

}
function isLeapYear(iYear) { var undefined                            

  if ( iYear != undefined && !isNaN(iYear) && iYear > 0 &&       

       (iYear%4==0 && iYear%100 !=0 || iYear%400==0)   )         

      return true                                                     

     else return false 
}


//以下验证身份证合法性
//hxb-2009-5-15
function checkId(varInput){
       if(varInput==null || varInput.trim()==""){
              alert("身份证号不能为空，请重新输入！");
              return false;
       }
       varInput = varInput.trim();
       if(varInput.length!=18 && varInput.length!=15){
       	     alert("身份证号位数不对，请重新输入！");
       	     return false;
       }
       var ret = convertID(varInput);
  //     alert(ret);
       if(ret == false){
              alert("身份证号不正确，请重新输入！");
              return false;
       }
       else if(varInput.length==18 && varInput!=ret){
              alert("身份证号不正确，请重新输入！");
              return false;
       }
       else{
              //返回值可以自动升级18位身份证号
              //return ret;
             // alert("正确");
              return true;
       }
}
/*
 *15身份证号码升18位,入口参数0为15身份证号码,返回值为18位身份证号码
 *如果证号错误则返回false
 *hxb-2009-5-15
 */
 function convertID(varInput){
      if(varInput==null || varInput.trim()==""){
              return false;
       }
       var strOldID = new String(varInput.trim());
       var strNewID = "";
       if(strOldID.length==15){
              for(i=0; i<15; i++){
                     //15位的身份证号必须全部由数字组成，否则，视为非法
                     if(checkZInt(strOldID.substring(i,1))){
                            return false;
                     }
              }
              //取得身份证中的年月日
              var year = "19" + strOldID.substr(6,2);
           //   alert(year);
              var month = strOldID.substr(8,2);
          //    alert(month);
              var day = strOldID.substr(10,2);
         //     alert(day);
              //校验日期是否正确
              if(checkDate(year,month,day)){             
                     return false;
              }          
              strNewID = strOldID.substring(0,6) + "19" + strOldID.substring(6,15);
       }
       else if(strOldID.length==18){
              for(i=0; i<17; i++){
                     //15位的身份证号必须全部由数字组成，否则，视为非法
                     if(checkZInt(strOldID.substring(i,1))){
                            return false;
                     }
              }
              if(strOldID.substring(17,18).toUpperCase!="X" && checkZInt(strOldID.substring(17,18))){
                     return false;
              }
              //取得身份证中的年月日
              var year = "19" + strOldID.substr(6,4);
              var month = strOldID.substr(10,2);
              var day = strOldID.substr(12,2);
              //校验日期是否正确
              if(checkDate(year,month,day)){
                     return false;
              }
              strNewID = strOldID.substring(0,17);
       }
       else if(strOldID.length==17){
              for(i=0; i<17; i++){
                     //15位的身份证号必须全部由数字组成，否则，视为非法
                     if(checkZInt(strOldID.substring(i,1))){
                            return false;
                     }
              }
              //取得身份证中的年月日
              var year = "19" + strOldID.substr(6,4);
              var month = strOldID.substr(10,2);
              var day = strOldID.substr(12,2);
              //校验日期是否正确
              if(checkDate(year,month,day)){
                     return false;
              }
              strNewID = strOldID;
      }
       return strNewID = strNewID + createCK(strNewID);
}
/*
 *根据17位的身份证号得到最后一位校验码
 *strID：身份证号前17位
 *只返回
 */
 function createCK(strID){
        var s = 0;
        var WI = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
        var AI = "10X98765432";
        for(i=0; i<17; i++){
               j = strID.substr(i,1) * WI[i];
               s = s + j;
        }
        s = s % 11;
        return AI.substr(s,1);
 }
/*
 *主要提供对日期的精确校验，验证日期是否合法
 *非法返回true,合法返回false
 *hxb-2009-5-15
 *参数说明：
 *year：年
 *month：月
 *day：日
 */
function checkDate(year,month,day){         
       var flag=false;
       var time=new Date(year,month-1,day);
   //    alert(time);
       var e_year=time.getFullYear();
   //    alert(e_year);
       var e_month=time.getMonth()+1;
   //    alert(e_month);
       var e_day=time.getDate();
   //    alert(e_day);
       if(year!=e_year||month!=e_month||day!=e_day)
       {
              flag=true;
       }
       return flag;
}
/*
 *检查输入的串是否在0到9之间的字符组成
 *不是则返回true，如果是则返回false
 *hxb-2009-5-15
 */
function checkZInt(str){
      var reg = /^\d+$/;
      if(arr=str.match(reg))
      {
       //全部是数字
           return false;
      }
      else
      {
       //含有其他字符
           return false;
      }
}
/*
 *字符串去掉左右空格的方法
 *hxb-2009-5-15
 */
String.prototype.trim = function(){
       return this.replace(/(^\s*)|(\s*$)/g, "");
}
/*
 *字符串去掉左空格的方法
 *hxb-2009-5-15
 */
String.prototype.ltrim = function(){
       return this.replace(/(^\s*)/g, "");
}
/*
 *字符串去掉右空格的方法
 *hxb-2009-5-15
 */
String.prototype.rtrim = function(){
       return this.replace(/(\s*$)/g, "");
}

