
주머니에서 꺼낸 쿠폰이 구겨져 있습니다. 귀퉁이는 찢어졌고 가운데엔 커피 자국이 있습니다.
그런데 찍으니까 읽힙니다.
"QR코드는 30%까지 망가져도 읽힌다"는 말을 들어 보셨을 겁니다. 맞는 말입니다. 다만 그 30%가 무엇의 30%인지는 대부분 잘못 알고 있습니다. 면적이 아닙니다.
이 글은 QR코드 표준 문서인 ISO/IEC 18004:2024 원문과, QR코드를 만든 일본 덴소웨이브의 공식 설명을 직접 읽고 정리한 것입니다.
먼저, 세 모서리의 큰 사각형부터
QR코드를 보면 세 모서리에 똑같이 생긴 큰 사각형이 있습니다. 이걸 파인더 패턴(finder pattern) 이라고 합니다.
표준은 이렇게 적습니다.
finder pattern located at three corners of the symbol ... intended to assist in easy location of its position, size and inclination
(심볼의 세 모서리에 있는 파인더 패턴 ... 위치·크기·기울기를 쉽게 찾도록 돕는다)
세 개인 이유가 여기 있습니다. 두 개면 코드가 어디까지인지는 알아도 어느 쪽이 위인지 모릅니다. 세 점이 있으면 직각을 이루는 꼭짓점이 하나 정해지고, 그 순간 방향이 결정됩니다.
그래서 QR코드는 거꾸로 들어도 읽힙니다. 표준은 이 성질을 한 줄로 못박아 뒀습니다.
Orientation independence: yes (both rotation and reflection)
(방향 독립성: 있음 — 회전과 반사 둘 다)
오류 정정 — 리드 솔로몬
찢어진 자리를 복원하는 건 리드 솔로몬 부호(Reed-Solomon) 입니다. QR코드는 데이터를 그대로 담지 않고, 여벌 정보를 함께 넣습니다. 일부가 사라져도 남은 것으로 원래 값을 계산해 냅니다.
표준은 정정 능력을 네 단계로 나눕니다. 원문 그대로입니다.
Reed-Solomon error correction (referred to as L, M, Q and H in increasing order of capacity) allowing the symbol codeword recovery of — L: 7 %; — M: 15 %; — Q: 25 %; — H: 30 %.
| 레벨 | 복구 가능 | 언제 쓰나 |
|---|---|---|
| L | 7% | 깨끗한 환경 · 데이터가 많을 때 |
| M | 15% | 가장 많이 쓰인다 |
| Q | 25% | 더러워지기 쉬운 곳 |
| H | 30% | 손상 위험이 큰 곳 |
가운데 두 줄의 용도 설명은 덴소웨이브 공식 문서의 문장입니다.
Level Q or H may be selected for factory environment where QR Code get dirty, whereas Level L may be selected for clean environment with the large amount of data.
그러니까 흔히 말하는 "30%"는 H 레벨을 썼을 때의 값입니다. 실제로 길거리에서 만나는 QR코드는 대부분 M(15%)입니다.
여기서부터가 핵심입니다 — 30%는 면적이 아닙니다
표준 문장을 다시 보십시오. codeword recovery라고 적혀 있습니다. 면적(area)이 아니라 코드워드입니다.
코드워드가 무엇인지는 덴소웨이브가 설명해 둡니다.
Data restoration rate for total codewords (codeword is a unit that constructs the data area. One codeword of QR Code is equal to 8 bits.)
(총 코드워드에 대한 데이터 복원율. 코드워드는 데이터 영역을 이루는 단위이며, QR코드의 코드워드 하나는 8비트다.)
코드워드는 8비트짜리 데이터 덩어리입니다. QR코드의 작은 검은/흰 칸(모듈) 여덟 개가 모여 하나가 됩니다.
차이가 왜 중요할까요.
코드워드는 하나만 틀려도 통째로 죽습니다. 8개 모듈 중 하나만 뒤집혀도 그 코드워드는 손상된 것으로 칩니다. 그러니 얼룩이 얇고 길게 여러 코드워드를 스치면, 지워진 면적은 작아도 죽은 코드워드 수는 많아집니다.
반대로 얼룩이 한 자리에 뭉쳐 있으면 면적이 커도 죽는 코드워드는 적습니다.
같은 30%가 지워져도, 어떻게 지워졌느냐에 따라 읽히기도 하고 안 읽히기도 합니다. "면적의 30%까지 괜찮다"가 틀린 말이 되는 이유가 이겁니다.
그럼 세 모서리가 찢어지면?
여기에 두 번째 함정이 있습니다.
표준은 파인더 패턴을 기능 패턴(function pattern) 으로 분류합니다. 정의가 이렇습니다.
function pattern — overhead component of the symbol (finder, separator, timing patterns and alignment patterns) required for location of the symbol or identification of its characteristics to assist in decoding
핵심은 overhead라는 단어입니다. 기능 패턴은 데이터가 아니라 부대 비용입니다. 그리고 리드 솔로몬이 복구하는 건 코드워드입니다.
즉 세 모서리 사각형은 오류 정정의 보호를 받지 않습니다.
이게 실제로 무슨 뜻이냐면 — 코드 한가운데가 커피로 뒤덮여도 읽히는데, 모서리 사각형 하나가 잘려 나가면 스캐너가 코드를 찾는 단계에서 실패합니다. 정정을 시도해 볼 기회조차 오지 않습니다.
같은 크기로 잘라 내도 어디를 잘랐느냐가 결과를 가릅니다. 쿠폰을 인쇄할 때 여백을 아끼려고 모서리를 붙여 자르면 안 되는 이유입니다.
크기 — 버전 1부터 40까지
QR코드는 크기를 40단계로 나눕니다. 표준의 표현으로는
from 21 × 21 modules (version 1) to 177 × 177 (version 40) modules
버전 1은 한 변에 칸이 21개, 버전 40은 177개입니다. 그래서 표준에서는 QR코드 하나를 `버전 4-L`, `버전 7-H`처럼 크기와 정정 레벨을 붙여 부릅니다.
여기서 맞바꿈이 하나 생깁니다. 정정 레벨을 올리면 여벌 정보가 늘어나므로, 같은 데이터를 담아도 코드가 커집니다. 튼튼하게 만들수록 자리를 많이 차지합니다. 그래서 실무에서는 대개 M에서 멈춥니다.
정리하면
· 세 모서리 사각형은 위치·크기·기울기를 잡는 표지입니다. 그래서 거꾸로 들어도 읽힙니다
· 오류 정정은 리드 솔로몬이고, 레벨은 L(7%) · M(15%) · Q(25%) · H(30%)입니다
· 30%는 면적이 아니라 코드워드 기준입니다. 같은 넓이가 지워져도 흩어져 있으면 더 위험합니다
· 모서리 사각형은 정정 대상이 아닙니다. 거기가 잘리면 아예 못 찾습니다
· 정정을 세게 걸수록 코드가 커집니다
구겨진 쿠폰이 읽힌 건 운이 아니라, 여벌 정보를 미리 넣어 둔 설계 덕분입니다. 다만 그 여벌은 데이터에만 붙어 있습니다.
확인하지 못한 것
· 국내 결제 QR(제로페이 등)이 어느 정정 레벨을 쓰는지는 공개된 1차 규격 문서를 찾지 못해 적지 않았습니다
· 8비트 코드워드가 QR코드 안에서 어떤 모양으로 배치되는지(모듈 8개의 실제 형태)는 표준 본문에 있으나, 이번에 확인한 것은 공개 미리보기 범위까지입니다. 그 범위 안에서 확인된 문장만 인용했습니다
· "면적의 30%"라는 오해가 실제로 얼마나 퍼져 있는지는 세어 보지 않았습니다. 표준 문장이 코드워드 기준이라는 사실만 확인한 것입니다
출처
· ISO/IEC 18004:2024 (Information technology — Automatic identification and data capture techniques — QR code bar code symbology specification, 4th edition, 2024-08). 공개 미리보기 PDF 본문에서 직접 확인 — 정정 레벨 L/M/Q/H 및 7/15/25/30%, 기능 패턴 정의(3.8), 파인더 패턴 설명, 방향 독립성, 버전 1~40 모듈 수
· 덴소웨이브(DENSO WAVE) 공식 문서 — Error Correction Feature. 코드워드 정의(8비트), 총 코드워드 기준 복원율, 레벨 M 최다 사용, 레벨별 권장 환경
'생활 속 궁금증' 카테고리의 다른 글
| 스마트워치가 손목만 대고 심박수를 아는 법 (피가 초록빛을 먹기 때문입니다) (1) | 2026.08.28 |
|---|---|
| 교통카드는 신호를 보내지 않습니다 (단말기가 만든 자기장을 흔들어서 답합니다) (0) | 2026.08.28 |
| 무선충전이 느린 건 충전기 탓이 아닙니다 (Qi 규격 원문이 지목한 범인은 '정렬') (0) | 2026.08.27 |
| 전자레인지를 켜면 와이파이가 느려지는 이유 (연방규정으로 확인한 주파수 겹침) (0) | 2026.08.27 |
| USB-C 케이블은 겉이 같아도 속이 다릅니다 (60W에서 멈추는 이유) (0) | 2026.08.26 |