← IANLAB
IANLAB · CASE

IDSPEC

나라마다 다른 여권·비자 사진 규격을 각국 정부 페이지에서 직접 읽어 모은 자료. 규격대로 자르고 얼굴 높이를 재는 도구가 같은 화면에 붙어 있습니다.

IDSPEC 열기 다른 앱 보기

사진은 이 기기를 벗어나지 않는다

얼굴 사진은 올려두고 잊기 곤란한 종류의 파일입니다. 그래서 IDSPEC에는 업로드 경로가 아예 없습니다. 자르기도 얼굴 높이 측정도 전부 브라우저 안에서 끝나고, 서버로 가는 요청이 없습니다. 화면 오른쪽 위의 “nothing leaves this device”는 약속이 아니라 구조입니다.

숫자보다 규칙에서 떨어진다

처음엔 크기 계산기로 시작했습니다. 35×45mm, 얼굴 높이 몇 mm — 나라마다 다르니 변환해 주면 되겠다고 봤습니다. 그런데 실제로 반려되는 지점은 거기가 아니었습니다.

안경·표정·머리덮개·사진의 유효기간 — 다들 어디나 같을 거라 짐작하는 것들에서 갈립니다. 그리고 이 규칙들은 나라마다 서로 모순됩니다. 그래서 축을 셋 더 세우고, 하나의 규칙을 놓고 각 당국이 뭐라고 썼는지 나란히 놓는 페이지를 따로 만들었습니다.

규격 도구 화면 — 파키스탄 여권 규격을 고른 상태로 얼굴 높이 29~34mm 가이드선이 그려져 있고, 오른쪽에 인쇄 크기·출력 픽셀·해상도·용량 제한이 표로 나열돼 있다
도구 — 규격을 고르면 자를 틀과 얼굴 높이 가이드가 잡힌다. "nothing leaves this device" 표시대로 사진은 브라우저 밖으로 나가지 않는다
국가 × 규칙 매트릭스 — 13개 당국을 행으로, 안경·미소·머리덮개를 열로 놓고 No·Conditions·Partly·빈칸으로 표시한 표
국가 × 규칙 표 — 빈칸은 "허용"이 아니라 그 당국 문서에서 해당 문구를 못 찾았다는 뜻이다. 표 아래 그 정의를 적어둔다

화면은 2026년 8월 29일에 담았습니다. 규격은 당국이 페이지를 고치면 바뀝니다.

예외의 존재가 아니라, 거기 붙은 조건이 답이다

모자를 금지하는 당국은 대개 종교 복식에 예외를 둡니다. 그래서 “예외가 있다”는 건 답이 아닙니다. 답은 그 예외에 붙은 조건이고, 조건은 어디도 같지 않았습니다.

폴란드는 폴란드에 등록된 종교 공동체 소속 증명서를 요구합니다 — 등록되지 않은 신앙에는 조문상 통로가 없습니다. 인도네시아는 의료 사유를 종교 사유와 같은 괄호에 넣는 유일한 나라이고, 나이지리아는 얼굴 특징을 하나도 가리지 않아야 한다는 조건을 더 겁니다. 인도는 예외를 준 다음 턱에서 이마까지, 양 옆선으로 경계를 그립니다. 베트남은 맨머리만 쓰고 예외가 없습니다.

스페인 영사관 문서는 “머리를 드러내고*”에 별표를 찍어놓고 각주를 인쇄하지 않았습니다. 원문의 오타까지 그대로 옮겨 적습니다 — 다듬는 순간 그건 더 이상 당국의 문서가 아니게 되니까요.

침묵에서 허가를 읽지 않는다

일본 문서는 모자와 헤어밴드만 말하고 종교 복식은 언급이 없습니다. 여기서 “안 적혀 있으니 된다”고 쓰면 그건 자료가 아니라 추측입니다. 그래서 부분으로만 표시하고, 표의 빈칸은 허용이 아니라 ‘해당 문구를 찾지 못했다’는 뜻이라고 표 아래에 적어뒀습니다.

한 축의 국가 목록을 검색 한 번으로 확정하지 않는 것도 같은 이유입니다. 머리덮개 축을 만들 때 첫 검색 패턴이 “covering the top of the head”라는 표현을 놓쳐 일본이 통째로 빠져 있었습니다. 빠진 걸 발견하지 못했다면, 그 표는 ‘일본에는 규정이 없다’고 조용히 거짓말을 하고 있었을 겁니다.

어떻게 만들었나

프레임워크없음 — 정적 HTML·CSS·JavaScript로 빌드
사진 처리전부 브라우저 안에서 — 업로드 경로 자체가 없다
데이터국가별 규격을 스키마로 두고 빌드 때 검증
검증셀프테스트 · canonical↔sitemap 대조를 빌드에서 강제

모든 판정에는 당국의 원문 표현과 그것을 읽은 페이지 링크, 그리고 확인한 날짜가 붙습니다. 규격은 당국이 페이지를 고치면 바뀌기 때문에, 언제 확인한 값인지 없으면 정확한 숫자도 믿을 근거가 없습니다.

IDSPEC 열어보기