QR 코드 해부
QR 코드는 균일한 점 무늬처럼 보이지만, 사실 역할이 완전히 다른 부품 예닐곱 개가 정해진 자리에 조립된 구조물입니다. 어디가 고정이고 어디가 데이터인지 알면 나머지가 전부 설명됩니다.
모서리의 큰 사각형 세 개
정식 명칭은 위치 검출 패턴입니다. 7칸짜리 정사각형 안에 흰 테두리와 검은 속이 겹친 구조이고, 어느 방향으로 잘라 읽어도 검정과 흰색의 길이 비가 1:1:3:1:1로 나오게 설계되어 있습니다. 스캐너는 사진 전체를 훑어 이 비율을 찾아 QR의 위치를 알아냅니다.
세 개만 있고 네 번째가 없는 것은 의도적입니다. 비어 있는 모서리가 어느 쪽인지로 QR이 회전했는지, 거울처럼 뒤집혔는지를 판단합니다.
점과 칸이 번갈아 나오는 줄
타이밍 패턴입니다. 스캐너는 이 줄을 세어 QR이 몇 칸짜리인지, 칸 하나가 사진에서 몇 픽셀인지를 계산합니다. 격자를 복원하는 자입니다.
작은 사각형들
정렬 패턴입니다. 5칸짜리 작은 과녁 모양이고 규격 2부터 등장합니다. 종이가 휘거나 비스듬히 찍혔을 때 격자가 어긋나는 것을 바로잡는 기준점입니다.
왼쪽 위 사각형을 둘러싼 띠
포맷 정보입니다. 15비트짜리이고 두 군데에 똑같이 기록됩니다.
- 어떤 복원 레벨을 썼는지
- 여덟 가지 마스크 무늬 중 몇 번을 썼는지
나머지 전부가 데이터
채우는 순서는 오른쪽 아래 모서리에서 시작해 두 칸씩 위로 올라가고, 맨 위에 닿으면 왼쪽으로 두 칸 옮겨 아래로 내려오는 뱀 모양 경로입니다. 이 순서 때문에 위 그림에서 붉은 점이 좌우 가장자리에 몰려 있습니다. 오른쪽 끝이 실제 주소, 왼쪽 끝이 복원 코드이고, 그 사이의 넓은 영역이 전부 채움값입니다.
마스킹
데이터를 다 채운 뒤 여덟 가지 격자무늬 중 하나를 골라 데이터 영역 전체에 XOR로 덧씌웁니다. 표준은 네 가지 벌점 규칙으로 가장 고르게 섞이는 무늬를 고르지만, 이 사이트는 채점 방식을 바꿔서 가장 하얗게 나오는 무늬를 고릅니다. 고른 번호는 포맷 정보에 그대로 기록합니다.
규격과 용량
| 규격 | 한 변 | 영문 대문자 | 일반 문자 |
|---|---|---|---|
| V1 | 21칸 | 25자 | 17자 |
| V2 | 25칸 | 47자 | 32자 |
| V5 | 37칸 | 154자 | 106자 |
| V7 | 45칸 | 224자 | 154자 |
| V10 | 57칸 | 395자 | 271자 |
영문 대문자와 숫자만 쓰면 두 글자를 11비트에 욱여넣는 전용 모드가 켜져서 용량이 거의 두 배가 됩니다. 도메인 부분은 대소문자를 구분하지 않으니 안전하지만, 경로는 서버 설정에 따라 다르므로 바꾸기 전에 확인이 필요합니다.