ISO / IEC 18004

QR 코드의
이론과 구조

Quick Response 코드가 데이터를 저장하고 복원하는 방식 — 구조, 인코딩, 오류 정정, 마스킹까지

01 — Structure

물리적 구조

QR 코드는 기능별로 구분된 영역들로 이루어집니다. 범례를 클릭하면 해당 영역이 강조됩니다.

Finder 패턴

세 모서리에 배치된 7×7 동심 사각형. 스캐너가 QR의 위치·방향을 인식하는 기준점입니다.

Format 정보

오류 정정 레벨(L/M/Q/H)과 마스크 번호를 저장. BCH(15,5) 코드로 이중 보호됩니다.

Timing 패턴

6번째 행·열에 흑백이 교번하는 패턴. 모듈 격자의 기준선 역할을 합니다.

Alignment 패턴

Version 2 이상에서 나타납니다. 곡면이나 왜곡된 코드의 좌표 보정을 돕습니다.

데이터 영역

실제 데이터와 Reed–Solomon 오류 정정 코드워드가 배치되는 영역입니다.

02 — Encoding

인코딩 파이프라인

입력 문자열은 네 단계를 거쳐 QR 코드의 모듈 패턴으로 변환됩니다.

01
모드(Mode) 선택

입력 문자 집합에 따라 최적 인코딩 방식을 선택합니다.
Numeric — 숫자만, 10비트로 3자   Alphanumeric — 영숫자+일부 기호, 11비트로 2자
Byte — UTF-8 전체, 8비트/자   Kanji — 한·중·일, 13비트/자

02
데이터 비트열 생성

4비트 모드 지시자 + 문자 수 필드 + 데이터 비트 순서로 붙입니다. 이후 종료자(0000)와 패딩 코드워드 (0xEC 0x11 교번)를 채워 버전의 용량을 맞춥니다.

03
Reed–Solomon 오류 정정

GF(256) 갈루아 체 위에서 다항식 나눗셈을 수행, 오류 정정 코드워드를 생성합니다. H 레벨은 데이터의 30%가 파손되어도 복원 가능합니다. QR 로고를 중앙에 얹어도 읽히는 이유입니다.

04
모듈 배치 + 마스킹

비트열을 우하→좌 지그재그로 배치한 뒤, 8가지 마스크 패턴을 모두 XOR 적용해 4가지 페널티 점수 합산이 최소인 마스크를 최종 선택합니다.

03 — Error Correction

Reed–Solomon 오류 정정

QR 코드의 가장 독창적인 특성입니다. 레벨별로 복원 가능 비율이 달라집니다.

왜 H 레벨을 항상 쓰지 않을까? — 오류 정정 코드워드가 많아질수록 같은 버전에 담을 수 있는 데이터가 줄어듭니다. 동일한 데이터를 H 레벨로 저장하면 L 레벨보다 훨씬 큰 버전이 필요합니다.

04 — Masking

마스크 패턴

마스킹 없이 데이터를 배치하면 Finder 패턴 같은 규칙적 패턴이 나타나 스캐너가 오인식합니다. 8가지 XOR 마스크 중 페널티 점수가 가장 낮은 것을 선택합니다.

페널티 점수 규칙

ISO 18004 표준은 4가지 조건을 검사합니다. 연속 5개 이상 동색 모듈, 2×2 동색 블록, Finder 유사 패턴, 명암 비율 불균형. 합산 페널티가 가장 낮은 마스크를 채택합니다.

05 — Capacity

버전과 용량

Version 1(21×21)부터 Version 40(177×177)까지, 버전당 4씩 커집니다.

버전크기숫자(L)바이트(L)주요 용도
06 — Details

알아두면 좋은 특성

Quiet Zone

QR 코드 주변에 반드시 4모듈 너비의 흰 여백이 필요합니다. 없으면 스캐너가 경계를 인식하지 못합니다.

이중 Format 정보

오류 정정 레벨과 마스크 번호를 담은 Format 정보는 QR 내부에 두 곳에 복제 저장됩니다. Format 정보 자체도 BCH(15,5) 코드로 보호받아, Finder 패턴이 손상되어도 Format을 복원할 수 있습니다.

Dark Module

Version 정보와 Format 정보 사이 특정 위치의 모듈은 항상 검정입니다((4V+9, 8)). 마스크와 무관하게 고정됩니다.

마이크로 QR

ISO 18004는 11×11~17×17 크기의 마이크로 QR도 정의합니다. Finder 패턴이 하나뿐이며, 소형 전자 부품 라벨에 주로 쓰입니다.

URL QR 코드가 대부분 Version 3~5인 이유 — https://example.com 같은 URL은 약 20~40자(바이트 모드)이며, M 레벨 기준 Version 3(57자)~Version 4(78자) 안에 담깁니다. 로고를 얹으려면 H 레벨 Version 5 이상이 됩니다.