JavaScript 정규 표현 식 은 주민등록번호 가 합 법 적 인지 검증 합 니 다(두 가지 방법)

첫 번 째 방법:
사용자 등록 페이지 에서 요구 하 는 것 이 비교적 엄격 하기 때문에 신분증 js 에 대해 합 법 적 인지 검증 해 야 한다.이 기능 을 통 해 이 시스템 소프트웨어 를 엄 격 히 하여 많은 선원 들 을 걸 러 내야 한다.이 를 실현 하 는 방법 에 대해 설명해 드 리 겠 습 니 다.
사용자 가 입력 한 신분증 이 합 법 적 인지 아 닌 지 를 정규 표현 식 으로 판단 하 는 경우 가 많 습 니 다.정규 표현 식 으로 판단 하기 전에 신분증 번호 의 구성 에 대해 얼마나 알 고 있 습 니까?다음은 주민등록번호 에 얼마나 많은 정보 가 포함 되 어 있 는 지 알려 드 리 겠 습 니 다.
1.번호 의 구조
공민 신분 번 호 는 특징 조합 코드 로 17 자리 디지털 본체 코드 와 한 개의 검사 코드 로 구성 된다.배열 순 서 는 왼쪽 에서 오른쪽으로 여섯 자리 숫자 주소 코드,여덟 자리 숫자 생년월일 코드,세 자리 숫자 순서 코드 와 한 자리 숫자 검사 코드 로 나 뉜 다.
2.주소 코드(앞 여섯 자리)
인 코딩 대상 이 상주 호적 이 있 는 현(시,기,구)의 행정구 역 코드 를 나타 내 고 gb/T2260 의 규정 에 따라 집행 한다.
3.생년월일 번호(7 위~14 위)
인 코딩 대상 이 태 어 난 해,월,일 을 나타 내 고 gb/T7408 의 규정 에 따라 집행 하 며 년,월,일 코드 간 에 구분자 가 필요 하지 않 습 니 다.
4.순서 코드(15 위 에서 17 위)
같은 주소 코드 에 표 시 된 지역 범위 내 에서 같은 해,같은 달,같은 날 에 태 어 난 사람 에 게 정 해진 순서 번 호 를 나타 내 고 순서 번호 의 기 수 는 남성 에 게 분배 되 며 짝수 는 여성 에 게 분배 된다.
5.검사 코드(18 자리)
끝자리 번호 인 체크 코드 는 번호 작성 단위 가 통 일 된 공식 에 따라 계산 한 것 으로 누군가의 끝자리 가 0-9 이면 X 가 나 오지 않 지만 끝자리 가 10 이면 X 로 대체 해 야 한다.10 으로 끝자리 가 되면 이 사람의 신분증 은 19 명 이 되 기 때문이다.X 는 로마 숫자의 10 으로 10 을 X 로 대체 하면 공민의 신분증 이 국가 표준 에 부합 하도록 보장 할 수 있다.
주민등록번호 구조 가 각 부분 을 구성 한 다 는 뜻 을 알 고 우 리 는 주제 에 들 어가 기 시작 했다.
1.전국 지역 의 대상 정의
"북경",12:"천진",13:"하북",14:"산 서",15:"내몽고",21:"랴오닝",21:"랴오닝",22:"길 림",23:"흑룡강",31:"상해",32:"강 소",33:"절강",34:"안 후 이",35:"안 후 이",35:"복 건",36:"복 건",36:"강서",37:"산동",41:"하남",42:"후 베 이",43:"후 베 이",43:"호 남",44:"광 둥",45:"광 시",46:"광 시",46:"하 이 난",50:"충 칭",51:"충 칭",51:"쓰 촨",52:",",53:"운남",54:"티베트",61:"산 시",62:"감숙성",63:"청해",64:"영하",65:"신장",71:"대만",81:"홍콩",82:"마카오",91:"외국"}
2.정규 표현 식 판단

function isCardID(sId){
 var iSum=0 ;
 var info="" ;
 if(!/^\d{17}(\d|x)$/i.test(sId)) return "              ";
 sId=sId.replace(/x$/i,"a");
 if(aCity[parseInt(sId.substr(0,2))]==null) return "         ";
 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 "           ";
 for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) ;
 if(iSum%11!=1) return "          ";
 //aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?" ":" ");//                   
 return true;
}
두 번 째 방법:

function scCard(){ 
 var scType=document.getElementById("sc_card_type").value; 
 if(scType=="1"){ 
  var scCard=document.getElementById("sc_card_num").value; 
      if(scCard.length!=0){ 
      if(!checkCard(scCard)){ 
      $("#errorTips").html("         "); 
      }else{ 
      $("#errorTips").html(""); 
      } 
      } 
 } 
 return false; 
 } 
 //function checkidno(obj) { 
  var vcity={ 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:"  " 
   }; 
 checkCard = function(obj) 
 { 
  //var card = document.getElementById('card_no').value; 
  //     
  // if(card === '') 
  // { 
  //  return false; 
  //} 
  //    ,   
  if(isCardNo(obj) === false) 
  { 
   return false; 
  } 
  //     
  if(checkProvince(obj) === false) 
  { 
   return false; 
  } 
  //     
  if(checkBirthday(obj) === false) 
  { 
   return false; 
  } 
  //       
  if(checkParity(obj) === false) 
  { 
   return false; 
  } 
  return true; 
 }; 
 //          ,    ,   
 isCardNo = function(obj) 
 { 
  //      15   18 ,15      ,18  17    ,        ,        X 
  var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/; 
  if(reg.test(obj) === false) 
  { 
   return false; 
  } 
  return true; 
 }; 
 //       ,     
 checkProvince = function(obj) 
 { 
  var province = obj.substr(0,2); 
  if(vcity[province] == undefined) 
  { 
   return false; 
  } 
  return true; 
 }; 
 //         
 checkBirthday = function(obj) 
 { 
  var len = obj.length; 
  //   15  ,    (3 ) (3 ) (2 ) (2 ) (2 )   (3 ),     
  if(len == '15') 
  { 
   var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/; 
   var arr_data = obj.match(re_fifteen); 
   var year = arr_data[2]; 
   var month = arr_data[3]; 
   var day = arr_data[4]; 
   var birthday = new Date('19'+year+'/'+month+'/'+day); 
   return verifyBirthday('19'+year,month,day,birthday); 
  } 
  //   18  ,    (3 ) (3 ) (4 ) (2 ) (2 )   (4 ),        X 
  if(len == '18') 
  { 
   var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/; 
   var arr_data = obj.match(re_eighteen); 
   var year = arr_data[2]; 
   var month = arr_data[3]; 
   var day = arr_data[4]; 
   var birthday = new Date(year+'/'+month+'/'+day); 
   return verifyBirthday(year,month,day,birthday); 
  } 
  return false; 
 }; 
 //     
 verifyBirthday = function(year,month,day,birthday) 
 { 
  var now = new Date(); 
  var now_year = now.getFullYear(); 
  //        
  if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) 
  { 
   //       (3  100   ) 
   var time = now_year - year; 
   if(time >= 0 && time <= 130) 
   { 
    return true; 
   } 
   return false; 
  } 
  return false; 
 }; 
 //       
 checkParity = function(obj) 
 { 
  //15  18  
  obj = changeFivteenToEighteen(obj); 
  var len = obj.length; 
  if(len == '18') 
  { 
   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 cardTemp = 0, i, valnum; 
   for(i = 0; i < 17; i ++) 
   { 
    cardTemp += obj.substr(i, 1) * arrInt[i]; 
   } 
   valnum = arrCh[cardTemp % 11]; 
   if (valnum == obj.substr(17, 1)) 
   { 
    return true; 
   } 
   return false; 
  } 
  return false; 
 }; 
 //15  18      
 changeFivteenToEighteen = function(obj) 
 { 
  if(obj.length == '15') 
  { 
   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 cardTemp = 0, i;  
   obj = obj.substr(0, 6) + '19' + obj.substr(6, obj.length - 6); 
   for(i = 0; i < 17; i ++) 
   { 
    cardTemp += obj.substr(i, 1) * arrInt[i]; 
   } 
   obj += arrCh[cardTemp % 11]; 
   return obj; 
  } 
  return obj; 
 };

좋은 웹페이지 즐겨찾기