현재 위치 - 회사기업대전 - 정보 컨설팅 - 정규 표현식으로 주민등록번호를 필터링하는 방법

정규 표현식으로 주민등록번호를 필터링하는 방법

이번에 여러분에게 가져온 것은 어떻게 정규식으로 주민등록번호를 걸러내는가입니다. 정규식을 사용하여 주민등록번호를 필터링할 때 주의할 사항은 무엇입니까? 다음은 실전 사례입니다. 한번 봅시다.

짧은 말

사용자의 실명 검증을 할 때 주민등록번호의 정규 표현식과 인증 체계를 자주 사용한다. 이 문서에서는 실제 프로젝트 상황에 따라 적절한 시나리오를 선택할 수 있는 두 가지 검증 시나리오를 나열합니다.

ID 번호 설명

주민등록번호가 정확하고 공식적인 명칭은' 시민권번호' 여야 한다. 중화인민공화국 국가표준인 GB11643-1999 에 따르면 시민권번호는 17 자리 디지털 본체 코드와 숫자로 구성된 피쳐 조합 코드입니다. 왼쪽에서 오른쪽으로 순서는 6 자리 주소 코드, 8 자리 생년월일 코드, 3 자리 시퀀스 코드, 1 자리 검사 코드입니다.

베이징 조양구의 한 여성 주민등록번호를 예로 들어 보겠습니다. ID 번호의 의미는 다음 그림과 같습니다.

주: 주민등록번호는 GB11643-1999 에서 나옵니다.

0 부터 전체 주민등록번호 확인 과정을 마치겠습니다.

시나리오 1 (단순)

1..1분할 규칙

1..1.1주소 코드 규칙: 주소 코드 길이는 6 자리입니다.

숫자 1-9 로 시작합니다.

마지막 다섯 개의 숫자는 0 에서 9 까지의 숫자이다.

위 규칙에 따라 주소 코드에 대한 정규 표현식: /[ 1-9] \ d {5}/

1..1.2 년 코드 규칙: 연도 코드 길이 4 자리.

숫자 18, 19 또는 20 으로 시작합니다.

나머지 두 자리는 0-9 입니다.

위 규칙에 따라 연도 코딩에 대한 정규 표현식을 작성합니다:/(18 |19 | 20) \ d {2}/ 18 로 시작하는 연도가 필요하지 않은 경우 18 을 제거할 수 있습니다.

1..1.3 월 코드 규칙:

월 코드는 2 자리 숫자입니다.

첫 번째는 0 이고 두 번째는 1-9 입니다.

또는 첫 번째는 1 이고 두 번째는 0-2 입니다.

위 규칙에 따라 월코드에 대한 정규 표현식:/((0 [1-9]) | (1[0-2])/을 작성합니다.

1..1.4 날짜 코드 규칙:

날짜 코드는 2 자리 숫자입니다.

첫 번째는 0-2, 두 번째는 1-9 입니다.

또는10,20,30,31.

위 규칙에 따라 날짜 코드에 대한 정규 표현식:/(([0-2] [1-9]) |10 | 20 | 30 | 3/kloc 을 작성합니다

1..1.5 시퀀스 코드 규칙:

일련 번호는 3 자리 길이입니다.

시퀀스 코드는 숫자입니다

위 규칙에 따라 시퀀스 코드에 대한 정규 표현식: /\d{3}/ 을 작성합니다.

1..1.6 검사 코드 규칙:

검사 코드 길이는 1 비트입니다.

숫자, 문자 x 또는 문자 x 일 수 있습니다.

위 규칙에 따라 검사 코드에 대한 정규 표현식: /[0-9Xx]/.

1.2 스키마 1 정규 표현식

위의 6 가지 규칙에 따라 전체 정규식과 테스트 프로그램은 다음과 같이 제공됩니다.

Var p =/[1-9] \ d {5} (18 |19 | 20) \ d

//출력 true

Console.log (p.test ("1101051949/kr

//출력 false 는 0 으로 시작할 수 없습니다.

Console.log (p.test ("0101051949120

//출력 휴가 연도는 17 로 시작할 수 없습니다.

Console.log (p.test ("1101051749/kr

//수출휴가월은 13 이 될 수 없습니다.

Console.log (p.test ("1101051949/kr

//출력 휴가 날짜는 32 가 될 수 없습니다.

Console.log (p.test ("1101051949/kr

//출력 false 는 로 끝날 수 없습니다.

Console.log (p.test ("1101051949/kr 1.3 시나리오 분석

시나리오 1 은 기본적인 형식 판단일 뿐, 주로 세 가지 단점이 있습니다.

주소 코드가 정확하지 않습니다. 예: 국내에는16,26 으로 시작하는 지역이 없지만, 사찰 날짜를 통해 충분히 정확하지 않다고 판단할 수 있다. 예: 1949023 1 도 확인할 수 있지만 2 월에는 3 1 패리티 코드가 없고 17 비트 본체 코드로 계산됩니다

시나리오 1 의 부족에 대해 시나리오 2 를 도입하여 시나리오 1 의 부족을 개선합니다.

2. 1 지방 주소 코드 확인

북중국: 베이징 1 1, 천진 12, 하북성 13, 산서 14

동북: 요녕 2 1, 길림 22, 흑룡강 23

화동: 상하이 3 1, 장쑤 32, 절강 33, 안후이 34, 푸젠 35, 강서 36, 산둥 37.

화중: 하남 4 1, 호북 42, 호남 43

남 중국: 광동 44, 광시 45, 하이난 46

서남: 쓰촨 5 1, 구이저우 52, 운남 53, 티베트 54, 충칭 50.

서북: 산시 6 1, 간쑤 62, 청해 63, 닝샤 64, 신장 65.

특별: 대만성 7 1, 홍콩 8 1, 마카오 82

위의 주소 코드에 따르면 주민등록번호의 처음 두 자리를 검사해 정확도를 더욱 높였다. 현주소 코드는 20 13 판 행정구역 코드 GB/T2260 을 기준으로 합니다. 구역 코드의 역사적 진화로 주소 코드의 마지막 네 자리 숫자를 확인할 수 없다. 통통한 주민등록번호를 예로 들어 보겠습니다. 제 번호는 232 1 으로 시작하는데, 현재 행정구역 코드표에는 이 코드가 없습니다. 따라서 이 문서에서는 처음 두 지방의 주소 코드만 확인합니다.

9 1 은 외국인이 받은 중국 주민등록번호의 처음 두 자리 숫자로 시작했다는 말도 있지만 확인되지 않았습니다. 9 1 로 시작하는 신분증이 있거나 마브리를 아는 경우 관련 정보를 확인해 주세요.

위의 분석에 따르면, 지방 주소 코드의 검증 및 테스트 절차는 다음과 같습니다.

Var checkProv = function (val) {

Var 모드 =/[1-9] [0-9]/;

Var provs = {1 1: "베이징", 12: "천진", 13: 33: "절강", 34: "안후이", 35: "복건", 36: "장시", 37: "산둥", 4 1: "허난" 6 1: "산시", 62: "간쑤", 63: "청해", 64: "닝샤", 65: "신장", 7/KLOC-

If (패턴. 테스트 (val)) {

If(provs[val]) {

True 를 반환합니다

}

}

False 를 반환합니다

}

//출력 참, 37 은 산둥.

Console.log (checkprov (37));

//출력 false, 16 이 존재하지 않습니다.

Console.log (checkprov (16)); 2.2 생년월일 코드 검증

생년월일 코드의 검증을 해석하지 않고 다음과 같은 기능과 테스트 단계를 직접 제공합니다.

Var checkDate = function (val) {

Var 모드 =/(18 |19 | 20) \ d {2} ((0 [1-9])

If (패턴. 테스트 (val)) {

Varyear = val.substring (0,4);

Varmonth = val.substring (4,6);

Vardate = val.substring (6,8);

Var date2 = 새 날짜 (연도+"-"+월+"-"+날짜);

(날짜& & ampdate2.getmonth () = = (parse int (month)-1)) {

True 를 반환합니다

}

}

False 를 반환합니다

}

//출력 true

Console.log (checkdate ("20180212"));

//Output false 2 월에는 3 1 일이 없습니다.

Console.log (checkdate ("20180231")); 2.3 패리티 검사 코드 검사

패리티 검사 코드의 계산은 약간 복잡하며 먼저 다음 공식을 제공합니다.

여기서 ai 는 ID 코드의 I 번째 값을 나타내고 Wi 는 I 번째 가중치 계수 값을 나타냅니다.

가중 계수 테이블 1:

I12345678 wi7910584219101/kloc

X012345678910a1810x98765432 알고리즘 프로세스:

주민등록번호 계정 인코딩 (앞 17 비트) 및 해당 가중 계수 (표 1) 를 기준으로 곱 합을 계산하여 결과 및 1 1 을 x 로 모읍니다

X 값 체크리스트 2 에 따라 a 18, 즉 검사 코드 값을 얻습니다.

코드 계산 프로그램을 확인하고 다음 코드를 테스트하십시오.

Var checkCode = function (val) {

Var p =/[1-9] \ d {5} (18 |19 | 20) \ d

Var 계수 = [7,9, 1 0,5,8,4,2,1,6,3,7,9,/kloc]

Var parity = [1, 0,' x', 9,8,7,6,5,4,3,2];

Var 코드 = val.substring (17);

If(p.test(val)) {

Varsum = 0;

For(var I = 0;; 나< 17; I++) {

Sum+= val [I] * factor [I];

}

If (parity [sum%11] = = code.touppercase ()) {

True 를 반환합니다

}

}

False 를 반환합니다

}

//출력 true, 체크 코드 일치.

Console.log (checkcode ("1101051949/klls)

//출력 false, 검사 코드가 일치하지 않습니다.

Console.log (checkcode ("1101051949/klls) 2.4 시나리오 2 전체 코드

Var checkID = function (val) {

If (체크 코드 (val)) {

Var date = val.substring(6,14);

If (검사 날짜 (날짜)) {

If (checkprov (val.substring (0,2)) {

True 를 반환합니다

}

}

}

False 를 반환합니다

}

//출력 true

Console.log (checkid ("1101051949/kloc

//출력 false, 검사 코드가 일치하지 않습니다.

Console.log (checkid ("1101051949/kloc

//출력 false, 날짜 코드가 일치하지 않습니다.

Console.log (checkid ("1101051949023/kr

//출력 false, 지역 번호가 일치하지 않습니다.

Console.log (checkid ("1601051949123/ 이 사건을 다 보고 나면, 너는 이미 방법을 익혔다고 믿는다. 더 흥미 진진한 Gxl 의 다른 관련 웹 문장!

추천 읽기:

Vue.js 사용자 정의 이벤트가 양식에 들어가는 방법입니다.

Vue.js 는 어떻게 그림을 자유롭게 끌 수 있습니까?

Vue2.0axios 를 사용하여 도메인 간 및 렌더링을 어떻게 사용합니까?

copyright 2024회사기업대전