MRZ 파서 및 체크 디지트 계산기
여권, 신분증 또는 비자의 기계 판독 영역(MRZ)을 붙여 넣으세요. TD3, TD2, TD1 모두 지원합니다. 형식을 감지하고, 모든 필드를 읽어 내며, ICAO 9303 체크 디지트를 하나하나 다시 계산해 인쇄된 값과 비교합니다. 모든 처리는 브라우저에서 이루어지며, 페이지 밖으로 나가는 것은 없습니다.
기계 판독 영역이란
기계 판독 영역(MRZ)은 여권이나 신분증 아래쪽에 있는, 폭이 고정된 여러 줄의 문자 블록이며 ICAO Doc 9303으로 표준화되어 있습니다. 이 영역은 문서 번호, 발급 국가, 이름, 국적, 생년월일, 성별, 만료일을 각각 정해진 위치에 기록하며, 판독이 올바른지 검증하는 체크 디지트도 함께 담고 있습니다.
TD1, TD2, TD3에서 각 필드의 위치
위치는 ICAO 9303의 번호 매기기 방식대로 각 줄마다 1부터 셉니다. 모든 체크 디지트는 자신이 보호하는 필드 바로 뒤에 있고, 복합 체크 디지트는 해당 줄의 마지막 문자입니다.
| 필드 | TD3 (여권) | TD2 | TD1 (신분증) |
|---|---|---|---|
| 문서 코드 | 1행, 1–2 | 1행, 1–2 | 1행, 1–2 |
| 발급 국가 | 1행, 3–5 | 1행, 3–5 | 1행, 3–5 |
| 이름 | 1행, 6–44 | 1행, 6–36 | 3행, 1–30 |
| 문서 번호 | 2행, 1–9 | 2행, 1–9 | 1행, 6–14 |
| 해당 체크 디지트 | 2행, 10 | 2행, 10 | 1행, 15 |
| 국적 | 2행, 11–13 | 2행, 11–13 | 2행, 16–18 |
| 생년월일 | 2행, 14–19 | 2행, 14–19 | 2행, 1–6 |
| 해당 체크 디지트 | 2행, 20 | 2행, 20 | 2행, 7 |
| 성별 | 2행, 21 | 2행, 21 | 2행, 8 |
| 만료일 | 2행, 22–27 | 2행, 22–27 | 2행, 9–14 |
| 해당 체크 디지트 | 2행, 28 | 2행, 28 | 2행, 15 |
| 개인 번호 | 2행, 29–42 | – | – |
| 해당 체크 디지트 | 2행, 43 | – | – |
| 복합 체크 디지트 | 2행, 44 | 2행, 36 | 2행, 30 |
체크 디지트 계산 방법
- 체크 디지트가 보호하는 필드를 가져옵니다. 문서 번호, 생년월일, 만료일, 개인 번호, 또는 복합 체크 디지트의 전체 범위입니다.
- 각 문자에 값을 부여합니다. 숫자는 그 자체 값, 알파벳은 알파벳 순서에 9를 더한 값(A = 10, Z = 35), 채움 문자 <는 0입니다.
- 각 값에 위치별 가중치를 곱합니다. 가중치는 첫 번째 문자의 7부터 시작해 필드 전체에 걸쳐 7, 3, 1이 반복됩니다.
- 곱한 값을 모두 더합니다.
- 체크 디지트는 그 합을 10으로 나눈 나머지(modulo 10), 즉 합계의 마지막 자리 숫자입니다.
누구의 것도 아닌 가상의 문서인 견본 여권의 번호 AM7304518로 계산 과정을 따라가 보면 다음과 같습니다:
| 문자 | 값 | 가중치 | 곱 |
|---|---|---|---|
| A | 10 | 7 | 70 |
| M | 22 | 3 | 66 |
| 7 | 7 | 1 | 7 |
| 3 | 3 | 7 | 21 |
| 0 | 0 | 3 | 0 |
| 4 | 4 | 1 | 4 |
| 5 | 5 | 7 | 35 |
| 1 | 1 | 3 | 3 |
| 8 | 8 | 1 | 8 |
| 합계, 그다음 modulo 10 | 214 → 4 | ||
따라서 이 영역에서 AM7304518 뒤에 인쇄되는 숫자는 4입니다. 위의 TD3 예시를 불러오면 파서가 눈앞에서 같은 숫자를 다시 계산합니다.
복합 체크 디지트
숫자 하나가 영역의 대부분을 한꺼번에 보호합니다. 바로 복합 체크 디지트입니다. 계산 방식은 같지만, 어떤 체크 디지트도 보호하지 않는 필드를 건너뛴 범위에 대해 계산합니다. TD1에서는 이 범위가 두 줄에 걸쳐 있어, 직접 작성한 파서가 흔히 여기서 틀립니다. 필드 체크 디지트는 모두 통과하는데 복합 체크 디지트만 실패하는 영역은, 부분별로는 정확히 옮겨 적었지만 잘못 조립된 것입니다.
체크 디지트가 보호하지 않는 것
이름을 보호하는 체크 디지트는 없고, 발급 국가를 보호하는 체크 디지트도 없습니다. 둘 중 어느 쪽이 잘못 읽혀도 아무 신호가 없습니다. 계산은 여전히 맞아떨어지기 때문입니다. 그래서 문서의 인쇄면도 함께 읽고 두 판독 결과를 비교하면, 체크 디지트가 잡아내지 못하는 오류를 잡을 수 있습니다.
자주 묻는 질문
MRZ란 무엇인가요?
기계 판독 영역(MRZ)은 여권이나 신분증 아래쪽에 있는, 폭이 고정된 여러 줄의 문자 블록이며 ICAO Doc 9303으로 표준화되어 있습니다. 이 영역은 문서 번호, 발급 국가, 이름, 국적, 생년월일, 성별, 만료일을 각각 정해진 위치에 기록하며, 판독이 올바른지 검증하는 체크 디지트도 함께 담고 있습니다.
이 도구는 어떤 형식을 지원하나요?
ICAO 9303의 세 가지 형식을 모두 지원합니다. 여권에 쓰이는 44자 2줄의 TD3, 36자 2줄의 TD2, 그리고 신분증이나 거주 허가증에 쓰이는 30자 3줄의 TD1입니다. 복합 체크 디지트가 없는 두 가지 비자 형식인 MRV-A와 MRV-B도 읽습니다. 형식은 줄 수와 줄 길이로 감지하며, 해당 형식에 있는 모든 체크 디지트를 다시 계산합니다.
체크 디지트가 실패하는 이유는 무엇인가요?
거의 항상, 그 체크 디지트가 보호하는 필드의 문자 하나가 잘못 읽혔거나 잘못 입력되었기 때문입니다. 0 대신 O, 8 대신 B, 줄 끝에서 빠진 채움 문자 같은 경우입니다. 표에는 영역에 인쇄된 숫자와 데이터로 계산한 숫자가 나란히 표시되고, 그 체크 디지트가 대상으로 하는 필드도 함께 나옵니다. 필드 체크 디지트는 통과했는데 복합 체크 디지트가 실패한다면 필드 사이의 문자를 확인하세요. 복합 체크 디지트는 필드 체크 디지트 자체도 포함합니다.
사진에서 영역을 읽을 수 있나요?
아니요. 이 페이지는 붙여 넣은 텍스트를 읽으며, 브라우저 밖으로는 아무것도 나가지 않습니다. 사진에서 영역과 인쇄된 페이지를 읽는 것은 인식 API가 하는 일입니다. 이미지를 담아 HTTP 호출을 한 번 보내면, 같은 체크 디지트가 이미 검증된 상태로 필드가 JSON으로 돌아옵니다.
제 데이터를 저장하나요?
아니요. 붙여 넣은 영역은 사용자의 브라우저에서 실행되는 코드가 파싱합니다. 아무것도 업로드되지 않으며, 그 내용을 담은 요청도 보내지 않습니다. 이 페이지는 정적 파일이며, 로드된 뒤에 보내는 유일한 요청은 상단에 표시할 서비스 공지가 있는지 묻는 것입니다. 이 호출에는 입력한 내용이 전혀 담기지 않습니다. 인식 API는 이와 별개이며, 직접 의도해서 호출해야 합니다.
다음으로 볼 페이지
- MRZ 생성기 – 테스트 데이터용으로 체크 디지트가 올바른 유효한 영역을 만듭니다.
- TD1, TD2, TD3 – 세 가지 형식, 각 형식의 줄 수와 문자 수, 그리고 표준에서 각 형식을 정의하는 곳.
- 문서 전체 읽기 – 인코딩된 면뿐 아니라 인쇄된 면까지, 계정 없이 요청 한 번으로.
- 국가별 여권 OCR – 이 API가 읽는 발급 국가 목록. 국가마다 자체 견본 영역이 있습니다.