﻿//检测身份证是否合法
function ckBodyId(sId)
  {var T=(sId.length==15);
   var iSum=0;
	 var info="";
   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:"国外"};
	 if(!(/^\d{17}[\dx]$/i.test(sId) || /^\d{15}$/i.test(sId)))
     {//alert("号码错误！");
      return false;
     }
	 sId=sId.replace(/x$/i,"a");
	 if(aCity[parseInt(sId.substr(0,2))]==null)
     {//alert("非法地区！");
      return false;
     }
 	 sBirthday=getBirthday(sId);
	 var d=new Date(sBirthday)
	 if(sBirthday!=d.getFullYear()+"/"+ (d.getMonth()+1) + "/" + d.getDate())
     {//alert("非法生日！");
      return false;
     }
   if(!T)
     {for(var i = 17;i>=0;i --) 
        iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11);
   	  if(iSum%11!=1)
        {//alert("非法证号！");
         return false;
        }
     }
   return true
  }

//根据身份证提取生日
function getBirthday(sId)
  {var d=sId.length==15?(sId.replace(/^\d{6}(\d{6})\d{3}$/ig,"$1")/1>48?"19":"20")+sId.replace(/^\d{6}(\d{6})\d{3}$/ig,"$1").replace(/^(\d{2})(\d{2})(\d{2})$/ig,"$1/$2/$3"):sId.replace(/^\d{6}(\d{8})\d{3}[\d|x]$/ig,function ($1){return arguments[1].replace(/^(\d{4})(\d{2})(\d{2})/ig,"$1/$2/$3")});
   d=new Date(d);
   return d.getFullYear()+"/"+ (d.getMonth()+1) + "/" + d.getDate();
  }

//身份证号15位转18位
function sfz15to18(s)
  {if(s.length!=15)
     return s;
   s=(s.substr(0,6)+"19"+s.substr(6)).split("");
   var w="7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1".split(" ");
   var r="1 0 X 9 8 7 6 5 4 3 2".split(" ");
   var sum=0;
   for(var i=0;i<17;i++)
     sum+=s[i]*w[i];
   return s.join("")+r[sum%11];
  }
