·1분 읽기
정규식 주민번호 검증 — 7자리 생년월일 포맷 확인과 비식별화
주민번호 앞 7자리(YYMMDD-N) 정규식으로 검증하는 실전 패턴이에요. 유효 생년월일 판정, 성별 구분, 뒷자리 마스킹까지 한 번에 정리했어요.

🔍
정규식 테스터 바로 사용하기
정규표현식을 테스트하고 매치 결과를 확인하세요
→
주민번호는 왜 정규식으로 검증해야 하나
**개인정보보호법**상 주민번호 수집·처리는 매우 제한돼요. 그래서 대부분 시스템은 **앞 7자리(YYMMDD-N)만 저장**하거나 뒷자리를 마스킹해요. 이 7자리도 형식 검증은 필요해요. 빈 값, 하이픈 위치 오류, 날짜 불일치 같은 입력 실수가 많거든요.
정규식 한 줄로 이 검증이 가능해요. 실무에서 자주 쓰는 패턴을 정리했어요.
1. 기본 7자리 형식 검증
YYMMDD-N 형식이에요. 하이픈 포함해서 정규식은 이래요.
```
^\d{6}-[1-4]$
```
- 6자리 숫자(YYMMDD)
- 하이픈
- 1~4 중 하나 (성별·세기 구분)
- 1·2: 1900년대생
- 3·4: 2000년대생
- 홀수: 남성, 짝수: 여성
2. 유효 생년월일까지 체크
월은 01~12, 일은 01~31까지만 허용하는 강화 패턴이에요.
```
^\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])-[1-4]$
```
2월 30일 같은 잘못된 날짜는 못 걸러요. 그건 정규식 말고 **날짜 파싱 라이브러리**가 따로 해야 해요.
JavaScript: `new Date(year, month-1, day)` 검증
Python: `datetime.date(year, month, day)` 예외 처리
3. 하이픈 선택적으로 허용
사용자가 하이픈 없이 입력할 수도 있어요. `?` 수식어로 선택 처리해요.
```
^\d{6}-?[1-4]$
```
프론트엔드에서 입력 자동 포맷팅(하이픈 자동 삽입)을 하면 사용자 경험도 좋아져요.
4. 뒷자리 마스킹 처리
로그나 화면에 주민번호가 남으면 위험해요. 뒷자리를 `*`로 가리는 정규식 치환이에요.
```javascript
// JavaScript
const masked = input.replace(/(\d{6})-(\d)\d*/, '$1-$2******');
// "901231-1234567" → "901231-1******"
```
```python
# Python
import re
masked = re.sub(r'(\d{6})-(\d)\d*', r'\1-\2******', input_str)
```
**DB에 원본 저장 금지**가 원칙이에요. 저장할 거면 암호화 필수.
5. Toolkio Regex Tester로 검증 흐름
Toolkio Regex Tester에 패턴과 테스트 데이터를 넣으면 매칭 결과가 실시간으로 보여요. 여러 패턴을 빠르게 비교할 수 있어서 팀 공유 전 검증에 유용해요.