본문으로 건너뛰기

QR 코드 해부

QR 코드는 균일한 점 무늬처럼 보이지만, 사실 역할이 완전히 다른 부품 예닐곱 개가 정해진 자리에 조립된 구조물입니다. 어디가 고정이고 어디가 데이터인지 알면 나머지가 전부 설명됩니다.

규격 3짜리 QR입니다. 검정 정사각형은 위치를 잡아주는 고정 부품, 붉은 점은 실제 데이터와 복원 코드, 옅은 회색 바탕은 채움값이 놓이는 자리입니다.

모서리의 큰 사각형 세 개

정식 명칭은 위치 검출 패턴입니다. 7칸짜리 정사각형 안에 흰 테두리와 검은 속이 겹친 구조이고, 어느 방향으로 잘라 읽어도 검정과 흰색의 길이 비가 1:1:3:1:1로 나오게 설계되어 있습니다. 스캐너는 사진 전체를 훑어 이 비율을 찾아 QR의 위치를 알아냅니다.

세 개만 있고 네 번째가 없는 것은 의도적입니다. 비어 있는 모서리가 어느 쪽인지로 QR이 회전했는지, 거울처럼 뒤집혔는지를 판단합니다.

점과 칸이 번갈아 나오는 줄

타이밍 패턴입니다. 스캐너는 이 줄을 세어 QR이 몇 칸짜리인지, 칸 하나가 사진에서 몇 픽셀인지를 계산합니다. 격자를 복원하는 자입니다.

작은 사각형들

정렬 패턴입니다. 5칸짜리 작은 과녁 모양이고 규격 2부터 등장합니다. 종이가 휘거나 비스듬히 찍혔을 때 격자가 어긋나는 것을 바로잡는 기준점입니다.

왼쪽 위 사각형을 둘러싼 띠

포맷 정보입니다. 15비트짜리이고 두 군데에 똑같이 기록됩니다.

  • 어떤 복원 레벨을 썼는지
  • 여덟 가지 마스크 무늬 중 몇 번을 썼는지

나머지 전부가 데이터

채우는 순서는 오른쪽 아래 모서리에서 시작해 두 칸씩 위로 올라가고, 맨 위에 닿으면 왼쪽으로 두 칸 옮겨 아래로 내려오는 뱀 모양 경로입니다. 이 순서 때문에 위 그림에서 붉은 점이 좌우 가장자리에 몰려 있습니다. 오른쪽 끝이 실제 주소, 왼쪽 끝이 복원 코드이고, 그 사이의 넓은 영역이 전부 채움값입니다.

마스킹

데이터를 다 채운 뒤 여덟 가지 격자무늬 중 하나를 골라 데이터 영역 전체에 XOR로 덧씌웁니다. 표준은 네 가지 벌점 규칙으로 가장 고르게 섞이는 무늬를 고르지만, 이 사이트는 채점 방식을 바꿔서 가장 하얗게 나오는 무늬를 고릅니다. 고른 번호는 포맷 정보에 그대로 기록합니다.

규격과 용량

규격별 크기와 담을 수 있는 글자수 (복원 레벨 L)
규격한 변영문 대문자일반 문자
V121칸25자17자
V225칸47자32자
V537칸154자106자
V745칸224자154자
V1057칸395자271자

영문 대문자와 숫자만 쓰면 두 글자를 11비트에 욱여넣는 전용 모드가 켜져서 용량이 거의 두 배가 됩니다. 도메인 부분은 대소문자를 구분하지 않으니 안전하지만, 경로는 서버 설정에 따라 다르므로 바꾸기 전에 확인이 필요합니다.