어떻게 자바 script 정규 표현 식 으로 신분증 번호 가 합 법 적 인지 검증 합 니까?

사용자 등록 페이지 에서 요구 하 는 것 이 비교적 엄격 하기 때문에 신분증 검증 이 합 법 적 인지 여 부 를 검증 해 야 한다.이 기능 을 통 해 이 시스템 소프트웨어 를 엄 격 히 하여 많은 선원 들 을 걸 러 내야 한다.이 를 실현 하 는 방법 에 대해 설명해 드 리 겠 습 니 다.
사용자 가 입력 한 신분증 이 합 법 적 인지 아 닌 지 를 정규 표현 식 으로 판단 하 는 경우 가 많 습 니 다.정규 표현 식 으로 판단 하기 전에 신분증 번호 의 구성 에 대해 얼마나 알 고 있 습 니까?다음은 주민등록번호 에 얼마나 많은 정보 가 포함 되 어 있 는 지 알려 드 리 겠 습 니 다.
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;
}

상기 내용 분석 은 바로 본 고의 모든 내용 으로 실현 방법 이 매우 간단 하 다.주로 각 신분증 번호 숫자 가 대표 하 는 뜻 을 이해 하면 매우 쉽다!

좋은 웹페이지 즐겨찾기