반응형
여권번호는 국가마다 규칙이 다르기 때문에, 이를 검증할 때는 국가별로 적절한 정규표현식을 사용하는 것이 중요합니다. 이 글에서는 입력된 여권번호가 특정 국가의 규칙에 부합하는지를 검사하는 JavaScript 함수 isValidPassportNumber의 구조를 살펴보고, 실제 여권번호를 조회 또는 검증할 수 있는 공공 API가 있는지에 대해서도 함께 안내합니다.
✨ 함수 설명
function isValidPassportNumber(passportNumber, isoCode) {
const passportPatterns = {
KR: /^[A-Z]{1}\d{8}$/, // 대한민국
US: /^\d{9}$/, // 미국
IN: /^[A-Z]{1}\d{7}$/, // 인도
CN: /^[EG]\d{8}$/, // 중국
DE: /^[CFGHJKLMNPRTVWXYZ]{2}\d{7}$/, // 독일
// ... (생략: 주요 국가별 패턴 포함)
};
const pattern = passportPatterns[isoCode.toUpperCase()];
if (!pattern) {
console.warn(`지원되지 않는 국가 코드입니다: ${isoCode}`);
return false;
}
return pattern.test(passportNumber);
}
✨ 주요 특징
- passportNumber: 검사할 여권번호 문자열
- isoCode: 국가 코드 (ISO-3166-1 alpha-2 표준)
- 국가별 정규표현식을 미리 정의해 놓고, 해당 국가에 맞는 패턴으로 검사
- 존재하지 않는 국가 코드일 경우 경고 로그 출력 후 false 반환
✨ 사용 예시
isValidPassportNumber('M12345678', 'KR'); // true → 대한민국 여권번호 형식
isValidPassportNumber('123456789', 'US'); // true → 미국 여권번호 형식
isValidPassportNumber('G12345678', 'CN'); // true → 중국 여권번호 형식
isValidPassportNumber('12345678', 'KR'); // false → 숫자만 존재하면 실패
❌ "실제 여권번호 확인 API"가 없는가?
이유설명
🔐 개인정보 보호 | 여권번호는 국가에서 관리하는 민감한 개인정보이므로 공개된 API로 검증할 수 없습니다. |
🛂 국가별 제한 | 대부분의 출입국/외교 시스템은 내부 전용 또는 정부기관 인증 필요 |
🌍 국제 협약 이슈 | 국가 간 여권 정보를 공유하려면 보안협정 또는 조약 체결이 필요함 |
✅ 가능한 대안 (실제 유효성은 확인 못해도 형식 검증은 가능)
1. 국가별 정규식 기반 유효성 검사
- 예: ^[A-Z]{1}\d{8}$ → 한국 여권 기본 형식
- 실제 발급 여부는 판단 못하지만 형식 기준 필터링 가능
→ 지금까지 작성해드린 isValidPassportNumber() 함수가 이에 해당합니다.
2. 항공사 또는 비자 발급 API (거의 예외적으로 사용됨)
- 예: IATA, Timatic Web API
- 사용 목적: 탑승객 비자/여권 규정 확인
- 사용 조건: 항공사, 여행사, 공항기관만 이용 가능
- 예시:
하지만 여전히 여권번호 자체 유효성 확인은 불가 (입력값이 유효한 형식인지 정도만 체크)
3. 비자 발급 시스템 내 자동 검증
- 예: ESTA(미국), K-ETA(한국), ETA(호주)
- 여권번호 입력 시 국가 DB와 실시간 대조
- 단점: API 형태가 아닌 웹 폼 기반이며, 사전 승인 시만 작동
🛠️ 현실적인 권장 방법
방법목적
정규식 필터 | 형식만이라도 맞는지 검증 (예: 입력 오류 방지) |
국가코드 + 길이 검증 | ISO + 자리수 + 시작문자 체크 |
OCR/스캔 연동 | 실제 여권 스캔 → MRZ 코드 검증 (실제 사용자 보유 여부 확인 가능) |
✨ 결론
isValidPassportNumber 함수는 실제 여권번호의 유효성을 정규표현식 기준으로 1차적으로 확인할 수 있는 강력한 도구입니다. 국가별 여권 발급 형식을 반영해 간단히 검증 가능하며, 민감한 데이터를 직접적으로 검증하기 어려운 환경에서는 유용한 사전 필터 역할을 할 수 있습니다. 다만, 실제 존재하는 번호인지는 반드시 수동 또는 관공서 시스템에서의 확인이 필요합니다.
반응형
'Programing > javascript' 카테고리의 다른 글
자바스크립트의 데이터 타입 완전 정복 (typeof, null, undefined) (0) | 2025.04.23 |
---|---|
자바스크립트의 var, let, const 차이와 올바른 사용법 (0) | 2025.04.23 |
javascript 비밀번호 유효성 검사 (0) | 2025.04.22 |
javascript 이메일 유효성 검사 (0) | 2025.04.22 |
윤년 기준으로 날짜 선택 옵션을 자동 변경하는 함수 (0) | 2025.04.22 |
생년월일 유효성 검사 함수 (0) | 2025.04.22 |
날짜 범위 형식 유효성 검사 함수 (1) | 2025.04.22 |
날짜 형식 유효성 검사 함수 (0) | 2025.04.22 |