그림 102감각관
QR 코드는 어떻게 읽힐까
QR 코드의 30 %를 손으로 가려도 휴대폰은 읽습니다. 그런데 모서리 하나를 가리면 못 읽습니다.
이 기기에서는 3D를 띄울 수 없습니다. 아래 안내 단계를 글로 볼 수 있습니다.
1 / 20 손 밑의 30 %내 글자를 수준 H, 버전 9(53 x 53 모듈) QR 코드로 만들었습니다. 마네킹 손이 그 위로 미끄러져 들어옵니다. 판독창과 오른쪽 휴대폰을 보세요. 손이 모듈의 약 30 %를 가리는 동안에도 계속 읽힙니다.
끌어서 돌리고, 휠이나 두 손가락으로 확대하세요.
손으로 가려도 읽히는 부호
휴대폰을 QR 코드에 대면 스티커가 벗겨졌거나 모서리가 접혔거나 엄지가 걸려 있어도 금방 읽힙니다. 시리얼 상자의 바코드에 같은 짓을 하면 계산대가 삑 소리를 내며 거부합니다. 차이는 카메라에 있지 않습니다. QR 코드에는 보이지 않는 부분을 다시 만들어 내는 여분의 코드워드가 들어 있고, 판독기가 읽기를 시작하기도 전에 어느 각도에서든 부호를 찾게 해 주는 표시가 세 개 있습니다.
무대는 내 글자, 또는 이 페이지의 주소를 수준 H, 버전 9 QR 코드로 만든 것으로 시작합니다. 53 x 53 모듈짜리 정사각형이 전시 탁자 위에 놓여 있습니다. 마네킹 손이 가장자리에서 미끄러져 들어와 53열 가운데 16열을 덮고 멈춥니다. 모듈 2,809개 중 848개, 기호의 30.2 %입니다. 판독창은 계속 읽힘이라고 하고, 오른쪽 휴대폰도 부호를 찾아 내 글자를 계속 보여 줍니다. 이때 기호의 오류 정정 블록 8개는 모두 한계에 닿아 있습니다. 블록마다 틀린 코드워드가 12개이고, 이 크기의 블록이 고칠 수 있는 최대가 12개입니다. 가리개를 한 열만 넓혀 32.1 %가 되면 읽기가 멈춥니다.
이번에는 모서리를 찢어 봅니다. 찢긴 삼각형은 기호의 3.2 %로 손이 가린 것보다 훨씬 작은데, 아예 읽히지 않습니다. 이 페이지는 두 가지 일이 왜 일어나는지 무대가 쓰는 숫자로 설명합니다. 숫자는 QR 코드의 국제 표준인 ISO/IEC 18004 의 규칙과, 1994년 QR 코드를 개발한 덴소 웨이브가 설계에 대해 공개한 내용에서 왔습니다.
탁자 위의 기호는 QR 코드 그림이 아닙니다. 칸에 넣은 글자로 페이지에서 직접 모듈 하나하나를 계산했고, 프린터 드라이버가 쓰는 것과 같은 리드-솔로몬 산술을 씁니다. 그리고 표준의 기준 순서를 따르는 디코더가 다시 읽습니다. 깨끗한 기호를 이미지로 저장해 내 휴대폰으로 읽을 수도 있습니다. 인코더는 서로 다른 판독기 두 개와 다른 인코더 하나로 검사했습니다. 버전과 수준 조합 160가지에서 행렬이 모듈 하나까지 똑같았습니다.
무대 쓰는 법
무대 아래 칸에 글자를 넣으면 입력하는 대로 기호가 다시 만들어집니다. 왼쪽 위 판독창은 맨 위에 결과(읽힘, 또는 안 읽힘과 그 까닭)를 보여 주고, 그 아래에 버전과 크기, 오류 정정 수준, 마스크와 벌점, 모드와 내 글자에 드는 비트 수, 코드워드, 얼마나 가렸는지, 지금 틀린 코드워드가 몇 개인지를 보여 줍니다. 그 밑의 작은 막대가 오류 정정 블록입니다. 틀린 코드워드가 고칠 수 있는 수에 가까워질수록 차오르고, 넘으면 빨갛게 바뀝니다.
오른쪽 휴대폰 화면은 카메라가 그림으로 무엇을 하는지 보여 줍니다. 빨간 선이 이미지를 위에서 아래로 훑고, 줄무늬가 1:1:3:1:1 에 맞는 줄마다 초록 표시가 남고, 원이 위치 표식 세 개를 찾았는지 알려 줍니다. 그 아래에 휴대폰이 읽은 글자나 포기한 까닭이 나옵니다.
조작 칸에서 버전은 쓸 가장 작은 버전입니다(글자가 들어가지 않으면 인코더가 기호를 키웁니다). 오류 정정은 L, M, Q, H 를 고르고, 마스크는 벌점이 가장 적은 것 대신 8가지 중 하나를 강제로 씁니다. 가림 너비와 가림 위치는 손을 옮기고, 가리개는 손을 종이 띠나 검은 테이프로 바꿉니다. 일별로 들어 올리기는 모듈을 하는 일에 따라 층으로 올리고, 일별 색은 올리지 않고 색만 칠합니다. 놓는 순서는 비트가 따라가는 길을 그리고 코드워드를 블록별로 칠합니다. 마스크 보기는 마스크가 뒤집는 모듈에 색을 입힙니다. 돌리기는 탁자 위 기호를 돌립니다. 비교는 이젤에 EAN-13 바코드나 마이크로 QR 기호를 올리거나, 벽에 버전 1~40을 겁니다. 여백은 흰 테두리를 없앱니다.
칠하기를 누르면 잉크, 수정액, 구멍, 지우개로 기호 위를 끌며 칠할 수 있습니다. 모서리 찢기와 기름 얼룩은 빨리 망가뜨리는 버튼입니다. 지금 시각은 기호에 현재 시각을 넣고 1초마다 새로 그립니다. 모듈 아무거나 누르면 그 모듈이 무엇인지 나옵니다. 행과 열, 맡은 일, 데이터 모듈이라면 몇 번 블록 몇 번째 코드워드의 몇 번째 비트인지까지 알려 줍니다. 어떤 모듈과 탁자 위 물건은 숨은 카드를 엽니다.
조작 칸 아래에는 내 글자를 비트로 풀어 쓴 것, 블록마다의 코드워드, 지금 버전의 네 가지 수준 표, 마스크 8가지를 나란히 놓은 것, 버전 표, 과제 12개, 사례 46가지, 「사실은」으로 시작하는 카드, 도감, 함께 보면 좋은 전시가 있습니다.
세 모서리의 네모
2차원 부호를 읽을 때 가장 어려운 일은 데이터가 아닙니다. 다른 것들로 가득한 카메라 화면에서 부호를 찾고, 어느 쪽이 위인지, 모듈 하나가 얼마나 큰지 알아내는 일입니다. 바코드는 찾기 쉽습니다. 레이저나 화소 한 줄이 가로지르기만 하면 됩니다. 매트릭스 부호는 2차원에서 찾아야 합니다.
덴소 웨이브의 답은 세 모서리의 네모, 표준이 위치 검출 패턴이라고 부르는 위치 표식이었습니다. 하나가 7 x 7 모듈이고, 검정 테두리, 흰 테두리, 3 x 3 검정 가운데로 되어 있습니다. 가운데를 지나는 선은 어느 방향이든 검정, 흰색, 검정, 흰색, 검정을 너비 1, 1, 3, 1, 1 로 지납니다. 이 비율은 부호를 돌리거나 키우거나 비스듬히 봐도 변하지 않기 때문에, 판독기는 화소를 줄줄이 훑으며 최근의 검정과 흰색 구간 다섯 개를 기억해 두었다가 비율이 맞는지 보면 됩니다.
왜 이 비율일까요? 덴소 웨이브에 따르면 개발진은 전단지, 잡지, 골판지 상자에 인쇄된 그림과 글자를 검정과 흰색 무늬로 바꿔 어떤 비율이 나오는지 셌습니다. 인쇄물에 가장 적게 나온 비율이 1:1:3:1:1 이었습니다. 2024년 덴소가 낸 인터뷰에서 개발을 이끈 하라 마사히로는 이것을 찾는 데 여섯 달쯤 걸렸고, 신문과 잡지를 한 쪽씩 사진으로 찍고 측정 프로그램을 밤새 돌려 두었다고 말합니다.
무대의 휴대폰은 자기가 보는 화소로 이 일을 그대로 합니다. 줄마다 따라가며 구간을 세고, 너비가 1:1:3:1:1 에서 반 모듈 안쪽으로 맞는 구간 다섯 개를 받아들입니다. 맞은 자리마다 가운데 구간의 한가운데를 지나 세로로도 같은 비율인지 확인합니다. 서로 맞아떨어지는 자리가 위치 표식 후보가 됩니다. 그런 후보가 세 개 있어야 하고, 나머지 둘 사이에서 직각을 이루는 것이 왼쪽 위 모서리입니다. 그 각도는 부호가 얼마나 돌아갔는지도 알려 줍니다. 돌리기로 기호를 돌리고 원이 모서리를 따라가는 것을 보세요.
데이터 일부가 우연히 같은 줄무늬를 만들 수도 있습니다. 판독기는 그런 것이 가리키는 격자가 맞지 않기 때문에 버립니다. 무대도 진짜 위치 표식 자리에서 찾았을 때만 찾은 것으로 셉니다.
분리 띠, 여백, 어두운 탁자
1:1:3:1:1 검사는 바깥 검정 테두리 양쪽에 흰색이 있어야만 됩니다. 기호 안에서는 분리 띠가 이것을 지켜 줍니다. 위치 표식을 한 모듈 너비의 흰 테두리가 감쌉니다. 기호 바깥에서는 여백이 맡습니다. 표준은 사방에 네 모듈 너비의 흰 여백을 요구합니다.
무대의 기호는 여백이 꼭 네 모듈인 종이에 찍혀 있습니다. 그 밑 탁자는 짙은 회색입니다. 여백을 끄면 종이 테두리가 사라져서 위치 표식의 바깥 테두리가 어두운 탁자에 바로 이어집니다. 위치 표식을 지나는 줄은 이제 긴 검정 구간 하나 다음에 흰색, 검정, 흰색, 검정이 오는 모양이 됩니다. 첫 구간이 여러 모듈 너비라서 비율이 맞지 않습니다. 휴대폰은 위치 표식을 하나도 찾지 못하고 판독창은 안 읽힘, 위치 표식을 못 찾음이라고 합니다. 데이터는 하나도 바뀌지 않았습니다.
덴소 웨이브의 인쇄 안내는 여백을 라벨 크기에 넣어 계산합니다. 예시는 수준 M 의 영숫자 50자로, 버전 3(29모듈)이 필요합니다(버전 2의 수준 M 에는 38자만 들어갑니다). 400 dpi 프린터로 모듈 하나를 4점으로 찍으면 모듈은 0.254 mm, 기호는 7.366 mm 이고, 여백 8모듈을 더하면 라벨 자리는 한 변 9.398 mm 입니다. 위치 표식이 하나뿐인 마이크로 QR 코드는 여백이 네 모듈이 아니라 두 모듈이면 됩니다.
부호 안에 인쇄한 자
모든 QR 코드의 6행과 6열은 한 위치 표식에서 다음 위치 표식까지 검정과 흰색이 번갈아 나옵니다. 이것이 타이밍 패턴입니다. 판독기는 이것으로 각 열과 행이 어디 있는지 압니다. 인쇄가 늘어났거나 종이가 울퉁불퉁하거나 카메라가 비스듬히 볼 때 중요합니다. 위치 표식 자리를 알면 모듈 크기를 짐작할 수 있지만, 번갈아 나오는 모듈을 세면 위치 표식 사이의 모듈 수를 정확히 압니다.
모듈 수는 버전도 알려 줍니다. 버전 V 는 한 변이 17 + 4V 모듈이라서 버전 1은 21 x 21, 버전 40은 177 x 177 입니다. 무대의 기호는 늘 같은 30 cm 종이를 채우므로 버전이 커질수록 모듈이 작아집니다. 버전 9에서는 5.7 mm, 버전 40에서는 1.7 mm 입니다.
타이밍 패턴은 기호 안에 있어서 데이터를 담을 수 있는 모듈도 차지합니다. 버전 1에서는 기능 패턴(위치 표식, 분리 띠, 타이밍, 형식 정보, 검정 모듈)을 빼면 코드워드용 모듈이 208개 남습니다. 8비트 코드워드 26개입니다.
휜 종이를 위한 과녁
1994년의 처음 QR 코드, 지금 모델 1이라 부르는 것에는 다른 길잡이가 없었습니다. 덴소 웨이브는 모델 1이 버전 14, 73 x 73 모듈, 숫자 1,167자리까지였다고 합니다. 오늘 쓰는 QR 코드인 모델 2는 정렬 패턴을 더해서 휜 면에 찍혔거나 많이 기울어져 보이는 부호도 읽히게 했습니다. 범위도 버전 40, 숫자 7,089자리까지 넓혔습니다.
정렬 패턴은 5 x 5 작은 과녁입니다. 검정 테두리, 흰 테두리, 검정 가운데 모듈로 되어 있습니다. 버전 1에는 없습니다. 버전 26에는 오른쪽 아래 모서리 가까이에 1개, 버전 713에는 6개가 있고, 버전 35~40에서는 46개까지 늘어납니다. 가운데 자리는 표준이 적어 둔 행과 열의 격자 위에 있습니다. 행과 열에 같은 자리를 쓰고, 위치 표식과 겹치는 세 곳은 뺍니다. 무대는 버전으로 그 자리를 계산합니다. 버전 9에서는 6, 26, 46 이라서 3 x 3 = 9곳에서 3을 빼 6개입니다.
위치 표식 세 개를 찾은 판독기는 부호의 세 모서리를 압니다. 네 번째 모서리에는 표시가 없어서 짐작한 다음, 가장 가까운 정렬 패턴을 찾아 짐작을 고칩니다. 이 네 번째 점이 있으면 기울어진 사진의 원근을 풀 수 있습니다. 큰 기호에서는 정렬 패턴 여러 개로 불룩한 종이도 따라갑니다.
나머지를 어떻게 읽을지 알려 주는 15비트
판독기는 데이터를 읽기 전에 두 가지를 알아야 합니다. 오류 정정 수준과, 8가지 마스크 중 무엇을 썼는지입니다. 이것이 5비트입니다. 수준이 2비트(L 은 01, M 은 00, Q 는 11, H 는 10)이고 마스크 번호가 3비트입니다.
이 5비트는 데이터보다 훨씬 단단하게 지킵니다. BCH 부호로 15비트까지 늘리는데, 1960년 보스와 레이초두리가, 따로 1959년 오크맹이 찾은 오류 정정 부호입니다. 검사 비트 10개는 5비트를 왼쪽으로 10칸 밀어 다항식 x^10 + x^8 + x^5 + x^4 + x^2 + x + 1 로 나눈 나머지입니다. 가능한 15비트 부호어 32개는 어느 둘이든 7비트 이상 다르기 때문에, 3비트가 틀려도 판독기는 가장 가까운 것을 고를 수 있습니다.
그다음 15비트를 정해진 무늬 101010000010010 과 XOR 합니다. 이것이 없으면 수준 M, 마스크 0은 흰 모듈 15개가 되어 판독기가 형식 정보와 빈 종이를 구별하지 못합니다.
형식 정보는 두 번 적습니다. 한 번은 왼쪽 위 위치 표식 둘레에, 또 한 번은 나머지 둘 옆에 나눠서, 오른쪽 위에 8비트, 왼쪽 아래에 7비트를 적습니다. 가리개가 한쪽을 가려도 다른 쪽이 있습니다. 무대에서 형식 정보 모듈을 누르면 숨은 카드가 열립니다. 왼쪽 위 모서리를 찢으면 한쪽만 남지만, 그때는 위치 표식도 이미 사라졌습니다.
왼쪽 아래 사본 옆에는 모든 QR 코드에서 검정인 모듈이 하나 있습니다. 4V + 9행, 8열의 검정 모듈입니다. 형식 정보 자리에 속하고 아무 정보도 담지 않습니다.
버전 1~40
작은 기호는 버전을 적을 필요가 없습니다. 판독기가 모듈을 세면 됩니다. 큰 기호에서는 모듈 크기를 조금만 잘못 짐작해도 수를 잘못 세기 때문에, 버전 7부터는 버전을 적어 둡니다. 버전 번호 6비트를 또 다른 BCH 부호로 18비트까지 늘립니다. 생성 다항식은 x^12 + x^11 + x^10 + x^9 + x^8 + x^5 + x^2 + 1 이고, 오른쪽 위 위치 표식 옆에 6 x 3 블록으로, 왼쪽 아래 옆에 3 x 6 블록으로 두 번 놓습니다. 버전 7은 000111110010010100, 버전 40은 101000110001101001 로 적습니다. 여기서도 틀린 비트 3개까지 고칠 수 있습니다.
버전 하나에 얼마나 들어가는지는 수준과 글자 종류에 따라 다릅니다. 덴소 웨이브의 표에 따르면 버전 1 수준 L 에는 숫자 41자리, 영숫자 25자, 바이트 17개, 한자 10자가 들어가고, 버전 1 수준 H 에는 숫자 17자리, 영숫자 10자, 바이트 7개, 한자 4자가 들어갑니다. 반대쪽 끝인 버전 40 수준 L 에는 숫자 7,089자리, 영숫자 4,296자, 바이트 2,953개, 한자 1,817자가 들어갑니다. 이 페이지의 인코더는 이 숫자를 그대로 재현합니다. 실험 칸의 표는 지금 수준에서 모든 버전의 용량과, 입력한 모듈 크기로 찍었을 때의 너비를 보여 줍니다.
덴소 웨이브는 휴대폰에게 너무 많이 읽히지 말라고 권합니다. 기종에 따라 다르지만 휴대폰 카메라에는 약 271바이트, 버전 10의 수준 L 을 실용적인 기준으로 듭니다. 비교로 벽에 버전들을 걸어 보면 까닭이 보입니다. 탁자와 같은 모듈 크기에서 버전 40은 너비가 1미터를 넘습니다.
글자에서 비트로
입력한 글자는 글자 모양 그대로 부호에 들어가지 않습니다. 구간으로 이루어진 비트열로 들어가고, 구간마다 4비트 모드 표시로 시작합니다.
숫자 모드(0001)는 숫자 세 개를 10비트에 담습니다. 1,000가지 조합이 1,024에 들어가기 때문입니다. 마지막에 숫자 두 개가 남으면 7비트, 하나면 4비트입니다. 영숫자 모드(0010)는 45가지 글자를 씁니다. 숫자, 대문자, 빈칸, 그리고 $ % * + - . / : 입니다. 두 글자를 45 x 첫 글자 + 둘째 글자로 11비트에 담습니다. 45 x 45 = 2,025 가 2,048에 들어가기 때문이고, 마지막에 한 글자가 남으면 6비트입니다. 바이트 모드(0100)는 바이트 하나에 8비트입니다. 한자 모드(1000)는 2바이트 시프트 JIS 글자를 13비트로 줄입니다. 그래서 QR 코드는 처음부터 일본어를 작게 담을 수 있었습니다.
모드 표시 다음에는 글자 수가 옵니다. 그 길이는 모드와 버전에 따라 다릅니다. 버전 1~9에서는 숫자 10비트, 영숫자 9비트, 바이트 8비트, 한자 8비트이고, 큰 버전은 더 깁니다. 그다음이 글자입니다. 끝에 인코더는 끝 표시로 0비트를 4개까지 붙이고, 다음 바이트 경계까지 0을 채운 뒤, 채움 바이트 11101100 과 00010001(236과 17)을 번갈아 넣어 데이터 용량을 채웁니다.
표준에 풀이 예가 있습니다. 숫자 8개 01234567 을 버전 1, 수준 M 으로 만듭니다. 모드 0001, 글자 수 0000001000(8), 그리고 012 는 0000001100, 345 는 0101011001, 67은 1000011 입니다. 끝 표시와 채움을 붙이면 데이터 코드워드 16개는 16진수로 10 20 0C 56 61 80 EC 11 EC 11 EC 11 EC 11 EC 11 입니다. 이 페이지의 인코더는 정확히 이 바이트와, 표준이 그 뒤에 적어 둔 오류 정정 코드워드를 만듭니다.
바이트 모드는 바이트가 어떤 문자 집합인지 말하지 않습니다. 2006년 이후 판은 ISO 8859-1 을 기본으로 정했고, 2000년 첫 판은 일본의 8비트 문자 집합을 썼습니다. 다른 글자를 위해 인코더는 숫자 26을 담은 ECI 머리(확장 채널 해석, 모드 0111)를 붙일 수 있습니다. 26은 UTF-8 이라는 뜻입니다. 무대는 글자에 영문 ASCII 밖의 것이 있으면 이것을 붙이므로 한글이나 이모지도 그대로 전해집니다. 일본어 가나를 넣으면 인코더는 대신 한자 모드로 바꿉니다. UTF-8 로는 글자당 24비트인 것이 13비트가 됩니다.
실험 칸은 내 글자를 이런 구간으로 나누고 비트 수를 보여 줍니다. 대문자로 쓴 URL 은 영숫자 모드를 쓸 수 있어서 비트를 거의 삼분의 일 줄입니다. 인쇄된 부호에 대문자 주소가 가끔 보이는 까닭 가운데 하나입니다.
QR 코드 안의 리드-솔로몬
데이터 코드워드 뒤에는 리드-솔로몬 부호의 오류 정정 코드워드가 붙습니다. 어빙 리드와 구스타브 솔로몬이 1960년 다섯 쪽 논문에 적은 부호입니다. 덴소 웨이브는 이것을 음악 CD 에도 쓰는 수학적 방법이라고 소개합니다. 처음에는 인공위성과 행성 탐사선 통신의 잡음에 맞서려고 만들었고, 바이트 단위로 고치며 한데 몰려 생기는 오류에 잘 맞는다고 합니다.
계산은 바이트 값마다 하나씩, 원소가 256개인 체에서 합니다. 바이트 두 개를 더하는 것은 XOR 입니다. 곱하기는 다항식 x^8 + x^4 + x^3 + x^2 + 1 로 만든 표를 쓰는데, 표준이 QR 코드에 이 다항식을 정해 두었습니다. 데이터 코드워드 한 블록을 다항식의 계수로 보고 x^n 을 곱한 다음, 근이 1, a, a^2 부터 a^(n-1) 까지 n개인 생성 다항식으로 나눕니다. 나머지가 오류 정정 코드워드 n개입니다. 그러면 데이터와 나머지를 합친 블록 전체가 생성 다항식의 배수가 되어, n개의 근에서 값이 모두 0이 됩니다.
판독기는 받은 블록을 그 근들에서 계산합니다. 신드롬이라 부르는 결과가 모두 0이면 블록은 깨끗합니다. 아니면 신드롬에는 틀린 코드워드를 n/2개까지 찾아 바른 값을 구할 만큼의 정보가 들어 있습니다. 이 페이지의 디코더는 부호 이론에서 흔히 쓰는 세 단계로 이것을 합니다. 벌캠프-매시 알고리즘이 가장 짧은 오류 위치 다항식을 찾고(매시, 1969), 치엔 탐색이 자리를 하나하나 넣어 근을 찾고(치엔, 1964), 포니의 공식이 오류 값을 구합니다(포니, 1965).
규칙이 하나 더 있습니다. 가장 작은 기호에서 n/2개를 다 고치는 디코더는 틀렸지만 형식은 맞는 블록에 떨어지는 일이 너무 잦습니다. 그래서 표준은 오독을 막으려고 코드워드 몇 개를 남겨 둡니다. 버전 1은 수준 L 에서 3개, M 에서 2개, Q 에서 1개, H 에서 1개를 남기고, 버전 2-L 은 2개, 버전 3-L 은 1개를 남깁니다. 그러면 블록 하나는 (n - p)/2 개를 고칩니다. p 는 남겨 둔 수입니다. 버전 1-L 에는 오류 정정 코드워드가 7개 있지만 3개가 아니라 2개를 고칩니다. 실험 칸은 블록마다 고칠 수 있는 수 옆에 p 를 적어 둡니다.
코드워드는 비트 하나가 틀려도, 여덟 개가 다 틀려도 똑같이 틀린 코드워드입니다. 그래서 리드-솔로몬 부호는 얼룩과 찢김에 잘 맞습니다. 모듈 한 덩어리를 덮는 손상은 흩어진 비트 여럿이 아니라 코드워드 몇 개를 통째로 망가뜨리기 때문입니다.
블록과 섞어 놓기
아주 작은 버전을 빼면 코드워드는 블록으로 나뉘고, 블록마다 오류 정정 코드워드가 따로 붙습니다. 버전 9 수준 H 는 코드워드 292개가 블록 8개로 나뉩니다. 블록 넷은 데이터 코드워드가 12개, 넷은 13개이고 각각 오류 정정 코드워드가 24개라서, 데이터 100개와 오류 정정 192개입니다. 블록 하나가 틀린 코드워드를 12개 고치므로 기호 전체로는 292개 중 96개를 고칩니다.
블록은 하나씩 이어 놓지 않습니다. 모든 블록의 첫 데이터 코드워드가 먼저 오고, 그다음 모든 블록의 둘째 코드워드가 오는 식이며, 오류 정정 코드워드도 같은 방식으로 뒤따릅니다. 놓는 순서를 켜면 색으로 보입니다. 종이 위에서 이웃한 코드워드가 서로 다른 블록입니다. 그래서 코드워드 몇 개만 한 얼룩은 블록 하나를 다 망가뜨리지 않고 여러 블록에서 하나둘씩 가져갑니다.
처음의 손이 보여 주는 것이 이것입니다. 손 밑의 16열은 코드워드 96개를 바꾸는데, 블록 8개마다 꼭 12개씩입니다. 섞어 놓은 덕에 손상이 고르게 나뉘어 블록 8개가 한꺼번에 한계에 닿습니다. 한 열을 더 가리면 모든 블록에 틀린 코드워드가 늘어 다 같이 실패합니다.
잉크 한 방울을 칠하고 판독창 아래 막대를 보세요. 보통 여러 블록이 조금씩 올라갑니다. 과제 「블록 하나만 넘치게」는 다른 블록은 살리고 블록 하나만 실패하게 만드는 것인데, 섞어 놓기가 방해하기 때문에 생각보다 공이 듭니다.
코드워드를 놓는 길
데이터와 오류 정정 코드워드를 섞은 뒤에는 정해진 길을 따라 비트를 기호에 놓습니다. 오른쪽 아래 모서리에서 시작해 두 열을 짝지어 위로 올라갑니다. 오른쪽 모듈 다음 왼쪽 모듈, 그다음 한 행 위입니다. 맨 위에 닿으면 방향을 바꿔 다음 두 열을 내려오고, 이렇게 기호를 가로질러 갑니다. 기능 패턴은 모두 건너뛰고, 6열의 세로 타이밍 패턴은 짝이 어긋나지 않도록 통째로 건너뜁니다.
이 길을 알면 무대에서 보이는 몇 가지가 설명됩니다. 처음 네 비트인 모드 표시는 언제나 오른쪽 아래 모서리에 있습니다. 코드워드 대부분은 2 x 4 모듈 덩어리를 차지하지만, 길이 위아래에서 꺾이거나 정렬 패턴을 돌아가는 곳에서는 다른 모양으로 휩니다. 오른쪽 아래 모서리 근처 모듈을 누르면 모드 표시의 일부라는 카드가 나옵니다.
코드워드가 데이터 자리를 꼭 맞게 채우지 못하면 남는 모듈이 남는 비트입니다. 버전 26에는 7개, 버전 1420과 2834에는 3개, 버전 2127에는 4개가 있고 나머지 버전에는 없습니다. 마스크 전에는 흰색이고 판독기는 무시합니다.
마스크와 벌점
놓기만 한 기호에는 큰 검정 덩어리나 긴 줄이 생기거나, 운 나쁘면 데이터 일부가 위치 표식처럼 보일 수 있습니다. 모두 읽기를 어렵게 합니다. 그래서 인코더는 마스크를 씌웁니다. 행 i 와 열 j 에 대한 규칙이 참인 데이터 모듈을 모두 뒤집습니다. 규칙은 체스판 모양인 (i + j) mod 2 = 0 부터 ((i + j) mod 2 + (i j) mod 3) mod 2 = 0 까지 8가지입니다. 기능 패턴에는 마스크를 씌우지 않습니다.
인코더는 8가지를 모두 해 보고 표준이 정한 네 가지 벌점으로 결과를 매깁니다. 행이나 열에서 같은 색이 5개 이상 이어지면 3점이고, 5개를 넘는 모듈마다 1점씩 더합니다. 같은 색 2 x 2 덩어리마다 3점입니다. 위치 표식처럼 보이는 무늬(1011101 한쪽에 흰 모듈 4개가 붙은 것)마다 40점입니다. 검정 모듈 비율이 절반에서 5 % 벗어날 때마다 10점입니다. 점수가 가장 적은 마스크가 이기고, 그 번호가 형식 정보에 들어갑니다.
실험 칸은 내 기호의 8가지 모습을 점수와 함께 나란히 그립니다. 마스크 조작으로 다른 마스크를 골라도 부호는 읽힙니다. 판독기가 형식 정보에서 마스크 번호를 가져오기 때문입니다. 생성기 둘이 같은 글자로 다르게 생긴 부호를 만들고도 둘 다 맞는 까닭도 이것입니다. 덴소 웨이브의 FAQ 도 같은 데이터가 모드 같은 선택에 따라 다른 무늬가 될 수 있다고 적어 둡니다.
마스크 보기는 지금 마스크가 뒤집는 모듈을 모두 주황색으로 칠합니다. 실험 칸의 규칙과 비교해 보세요. 같은 규칙을 데이터 자리 전체에 쓴 것입니다.
30 %의 진짜 뜻
덴소 웨이브는 네 수준이 코드워드를 각각 약 7 %, 15 %, 25 %, 30 % 복원한다고 하고, 수준 M 을 가장 많이 쓴다고 덧붙입니다. 이 문장에서 중요한 낱말은 둘입니다. 「약」과 「코드워드」입니다.
「약」인 까닭은 몫이 버전마다 다르기 때문입니다. 모든 블록이 함께 고칠 수 있는 코드워드 수를 전체로 나누면, 버전 1~40에서 수준 L 은 7.7 %부터 10.5 %까지, M 은 15.4 %부터 19.2 %까지, Q 는 23.1 %부터 28.0 %까지, H 는 30.8 %부터 33.2 %까지입니다. 실험 칸의 표는 무대 위 버전의 정확한 값을 보여 줍니다.
「코드워드」인 까닭은 가림을 넓이로 재는데, 넓이가 코드워드로 단순하게 바뀌지 않기 때문입니다. 코드워드 가장자리만 가려도 전부를 가린 것만큼 확실하게 망가집니다. 흰 모듈 위에 떨어진 가림은 아무것도 바꾸지 않습니다. 손이나 종이 띠는 흰색으로 읽히기 때문입니다. 무대에서 모듈의 30.2 %를 덮은 손이 실제로 바꾸는 모듈은 약 16 %뿐입니다. 기능 패턴 위의 가림은 코드워드를 망가뜨리지 않지만 위치 표식, 타이밍, 형식 정보를 망가뜨릴 수 있습니다.
그래서 정직하게 정리하면 이렇습니다. 수준 H 기호는 넓이의 약 30 %를 가려도 버틸 수 있습니다. 가림이 데이터 위를 지나고 블록들이 손상을 고르게 나눠 가질 때, 손의 16열처럼 말입니다. 같은 넓이를 열이 아니라 행으로 놓은 16행 30.2 %는 버전 9에서 읽히지 않습니다. 엉뚱한 자리의 3.2 % 가림은 부호를 멈춥니다. 과제 「10 % 미만으로 망가뜨리기」가 그 자리를 찾는 과제입니다.
덴소 웨이브는 수준 고르는 법을 현장 말로 설명합니다. 부호가 더러워지는 공장에는 Q 나 H, 깨끗한 곳에서 데이터가 많으면 L 입니다. 열차 문의 부호가 햇빛과 비를 맞는 도쿄 노선의 스크린도어 시스템에는 50 % 손상까지 견디는 특수 부호 tQR 을 따로 만들었다고 덴소는 말합니다.
휴대폰이 부호를 찾아 읽는 순서
표준은 기준 복호 알고리즘을 적어 두었고, 실제 판독기는 세부가 달라도 그 순서를 따릅니다. 실험 칸의 퀴즈는 이 순서를 맞히는 것입니다.
먼저 그림을 검정과 흰색으로 바꿉니다. 반짝이는 캔이나 책상 등 아래의 부호는 고르게 밝지 않아서, 실제 판독기는 그림의 부분마다 기준값을 따로 정합니다. 그다음이 위치 표식입니다. 앞에서 본 1:1:3:1:1 훑기로 찾습니다. 세 중심에서 모듈 크기와 방향을 짐작하고, 위치 표식 사이 거리에서 버전을 짐작합니다. 버전 7 이상이면 버전 정보를 읽어 확인합니다. 네 번째 모서리가 있을 법한 자리 근처에서 정렬 패턴을 찾고 원근 변환을 맞춥니다. 이 변환이 격자의 모든 모듈을 그림 위 자리에 대응시킵니다.
그다음 모든 모듈의 가운데를 표본으로 읽고 형식 정보를 읽습니다. 가능한 형식 부호어 32개 가운데 읽은 것과 가장 가까운 것을 고르고, 필요하면 두 사본을 다 봅니다. 여기서 수준과 마스크를 압니다. 같은 모듈을 다시 뒤집어 마스크를 벗기고, 놓는 길을 따라가며 코드워드를 모아 블록으로 되돌린 뒤, 블록마다 오류를 고치고, 마지막으로 비트열을 풉니다. 모드, 글자 수, 글자를 끝 표시를 만나거나 데이터가 떨어질 때까지 읽습니다.
무대는 이 가운데 두 단계를 단순하게 했습니다. 휴대폰은 돌리기와 여백 설정이 반영된 진짜 화소에서 위치 표식을 찾지만, 그림을 휘거나 기울이지는 않습니다. 그리고 판독기는 원근을 맞추는 대신 알려진 자리에서 격자를 읽습니다. 또 가림은 흰색으로 다룹니다. 손은 흰 종이처럼, 검은 테이프는 검정으로 읽힙니다. 실제 카메라는 손 그림자와 피부 결을 보게 되어 더 잘 읽을 수도, 더 못 읽을 수도 있습니다.
덴소 웨이브는 부호와 상관없는 실용적인 한계도 하나 듭니다. 색입니다. 스캐너는 빨간 빛을 비춰 읽기 때문에 흰 종이 위 빨간 부호는 종이만큼 빨간 빛을 돌려보내서 보이지 않습니다. 흰 바탕에 검정을 권합니다.
바코드, 마이크로 QR, rMQR
QR 코드가 넘어서려던 바코드는 상품 바코드, 북아메리카의 UPC 와 다른 곳의 EAN-13 입니다. 노먼 우들랜드와 버나드 실버는 1949년 빛으로 읽는 부호의 첫 특허를 냈고, 1952년 10월 7일 특허를 받았습니다. 유럽 특허청에 따르면 계산대에서 처음 스캔한 UPC 는 1974년 미국 오하이오 슈퍼마켓의 껌 한 통이었고, 이런 바코드에는 많아야 20글자 정도가 들어갑니다.
EAN-13 바코드는 너비가 95모듈입니다. 양 끝에 3모듈, 가운데에 5모듈짜리 가드 무늬가 있고, 숫자 12개가 7모듈씩 차지합니다. 열세 번째 숫자는 막대로 찍지 않고, 왼쪽 숫자들에 두 가지 무늬 중 어느 것을 쓰는지로 나타냅니다. 마지막 숫자는 검사 숫자입니다. 숫자에 1과 3을 번갈아 곱해 더한 합이 10의 배수가 되게 정합니다. 대부분의 실수를 알아채지만 하나도 고치지는 못합니다. 비교로 이젤에 바코드를 올리고 위쪽 절반을 가려도 읽힙니다. 스캐너는 모든 막대를 지나는 깨끗한 줄 하나만 있으면 되기 때문입니다. 세로 띠를 가리면 읽히지 않습니다.
2004년 11월 JIS 표준이 된 마이크로 QR 은 반대쪽으로 갑니다. 위치 표식 둘을 빼고 하나만 두며, 여백은 2모듈이고, 크기는 네 가지입니다. M1 은 11 x 11 모듈에 숫자 5자리, M4 는 17 x 17 에 35자리까지 담습니다. 마스크는 4가지뿐이고, 형식 정보에는 수준 대신 3비트 기호 번호가 들어가며, M1 과 M3 의 마지막 데이터 코드워드는 4비트입니다. 이젤에는 내 글자가 들어가면 그것으로 만든 마이크로 QR 을 탁자 위 기호와 같은 모듈 크기로 보여 줍니다. M4 도 정식 부호의 버전 1보다 적게 담습니다.
2022년 5월 ISO 는 길고 좁은 라벨을 위한 직사각형 마이크로 QR 코드, rMQR 을 발행했습니다. 덴소 웨이브는 위치 표식을 하나 반 쓰고, 7 x 43 모듈부터 있으며, 17 x 139 모듈에 숫자를 361자리까지 담는다고 소개합니다. 덴소 웨이브는 직사각형 기호가 있는 더 큰 가족 iQR, 그림을 넣을 빈 자리가 있는 프레임 QR, 데이터 일부를 읽을 사람을 제한하는 SQRC 도 내놓았습니다. 연구자들은 더 나아갔습니다. 추와 동료들은 2013년 모듈 하나하나 안에 그림의 세부를 넣고 오류 정정에 기대어, 하프톤 그림처럼 보이면서도 읽히는 부호를 만드는 방법을 보였습니다.
모형과 실제 부호, 실제 판독기의 차이
인코더는 표준이 모델 2라 부르는 것을 숫자, 영숫자, 바이트, ECI 구간에 대해, 버전 1~40, 네 수준, 마스크 8가지 모두 구현합니다. 다만 비트를 아끼려고 모드를 섞는 대신 글자 하나에 구간 하나만 씁니다. 한자 모드는 가나로 한정했습니다. 시프트 JIS 표 전체가 크기 때문입니다. 가나에 대해서는 완전한 인코더와 같은 비트를 만듭니다. 내용 하나를 기호 16개까지 나눠 담는 구조적 연결은 구현하지 않았습니다.
무대의 판독기는 알려진 자리에서 격자를 읽습니다. 위치 표식은 모듈이 얼마나 남았는지로 확인하고, 대부분의 휴대폰 판독기처럼 셋 다 있어야 합니다. 형식 정보와 버전 정보는 표준 그대로 풀고, 마스크를 벗기고, 오독 방지분까지 넣어 리드-솔로몬으로 블록마다 고치고, 비트열을 풉니다. 실제 판독기는 흐림, 반사, 원근, 검정 모듈이 흰 모듈로 번지는 인쇄까지 견뎌야 하는데, 무대에는 이런 것이 없습니다.
휴대폰의 위치 표식 찾기는 화소에서 돌고 기호와 함께 돌아가지만, 그림은 깨끗하고 평평합니다. 칠하기와 얼룩 도구는 모듈 단위로 칠합니다. 기호는 잘 보이도록 탁자 위에서 늘 너비 30 cm 이지만, 실제 부호는 보통 몇 센티미터입니다.
판독창의 숫자는 모두 탁자 위 부호에서 나옵니다. 검사에 쓴 서로 다른 판독기 두 개(자바스크립트 공개 라이브러리 하나와 C++ 공개 라이브러리 하나)는 버전 110을 모든 수준과 마스크로 만든 시험 기호 320개, 버전 1140 기호 120개, 마이크로 QR 의 크기와 수준 여덟 가지, EAN-13 바코드를 모두 읽었습니다.
짧은 역사
당시 덴소의 한 사업부였던 덴소 웨이브는 1992년 QR 코드 개발을 시작했습니다. 자동차 공장은 여러 차종을 조금씩 만드는 방식으로 바뀌고 있었고, 부품은 제품마다 바코드를 10개쯤 붙여 보냈으며, 기름이 묻은 라벨은 읽히지 않았습니다. 덴소에 따르면 개발 팀은 두 사람이었습니다. 개발에는 한 해 반쯤 걸렸습니다. 1994년 발표된 부호는 숫자를 약 7,000자리 담고 한자를 넣을 수 있으며, 덴소 웨이브에 따르면 다른 부호보다 10배 넘게 빨리 읽혔습니다. 유럽 특허청은 2014년 이 팀에게 유럽 발명가상 대중상을 주면서 그전의 매트릭스 부호보다 약 20배 빠르다고 소개했습니다.
이름은 quick response 에서 왔지만, 덴소 웨이브는 정식 이름이 QR Code 이고 줄임말이 아니라고 합니다. 특허는 1994년 3월 14일 일본에 출원해 2938338호로 등록되었고, 같은 내용의 미국 특허 5,726,435 에는 하라 마사히로, 와타베 모토아키, 노지리 다다오, 나가야 다카유키, 우치야마 유지가 발명자로 올라 있습니다. 덴소 웨이브는 특허를 가지고 있지만 표준 QR 코드에는 행사하지 않으며, 처음부터 그렇게 정했다고 말합니다. QR Code 는 덴소 웨이브의 등록 상표인데, 무늬가 아니라 낱말에 대한 상표입니다.
이 부호를 처음 쓴 곳은 부품을 불러오는 카드인 전자 간판을 쓰는 자동차 업계였습니다. 광우병 같은 식품 파동 뒤에는 식품, 의약품, 콘택트렌즈 업체가 제품 추적에 썼습니다. 표준이 뒤따랐습니다. 1997년 10월 AIM 인터내셔널, 1998년 3월 JEIDA-55, 1999년 1월 JIS X 0510, 2000년 6월 ISO/IEC 18004 입니다. 지금 판인 네 번째 판은 2024년 8월 나왔습니다.
2002년 일본에서 QR 코드를 읽는 휴대폰이 나오면서 부호가 공장 밖으로 나왔습니다. 2011년 12월 유통 바코드를 맡는 GS1 이 휴대폰용으로 승인했습니다. EMVCo 는 2017년 7월 QR 결제 규격을 냈고, 싱가포르는 2018년 9월 17일 결제 방식 27가지를 SGQR 표 하나에 모았고, 브라질은 2020년 11월 16일 기관 734곳과 함께 픽스를 시작했습니다. 코로나19 동안 한국은 2020년 6월 10일부터 출입 명부에 QR 코드를 썼고, 잉글랜드와 웨일스는 2020년 9월 24일부터 업소 문에 NHS QR 포스터를 붙였고, 서명이 들어간 QR 코드인 EU 디지털 코로나19 증명서는 2021년 7월 1일부터 2023년 6월 30일까지 쓰였습니다. 유통업계는 이제 2027년 말까지 계산대가 2D 부호를 읽게 할 계획입니다.
자주 묻는 질문
정말 30 %를 가려도 읽힙니까?
수준 H 에서는 그렇습니다. 가림이 데이터 위를 지나고 손상이 블록들에 나뉠 때입니다. 무대에서 손이 모듈의 30.2 %를 덮어도 읽히지만, 한 열을 더 가려 32.1 %가 되면 읽히지 않습니다. 같은 넓이를 16열이 아니라 16행으로 놓으면 버전 9에서는 읽히지 않습니다. 위치 표식을 가리면 어떤 부호도 멈춥니다.
수준 L, M, Q, H 는 무슨 뜻입니까?
오류 정정 수준 네 가지입니다. 덴소 웨이브는 코드워드를 각각 약 7 %, 15 %, 25 %, 30 % 복원한다고 합니다. 높은 수준일수록 오류 정정 코드워드가 많이 들어서 같은 글자로도 기호가 커집니다. 덴소 웨이브는 수준 M 을 가장 많이 고른다고 합니다.
네모가 왜 넷이 아니라 셋입니까?
정사각형의 자리, 크기, 방향은 점 세 개로 충분히 알 수 있고, 직각을 이루는 모서리가 어느 쪽이 위인지 알려 줍니다. 똑같은 표시가 넷이면 두 방향에서 같은 모양이 되어 버립니다. 모델 2는 원근을 고치려고 네 번째 모서리 근처에 작은 정렬 패턴을 둡니다.
오른쪽 아래 모서리 근처의 작은 네모는 무엇입니까?
정렬 패턴입니다. 버전 26에는 하나가 있고, 큰 버전일수록 늘어나 버전 3540에는 46개가 있습니다. 판독기는 이것으로 휜 면에 찍혔거나 비스듬히 찍은 부호를 따라갑니다.
QR 코드에는 왜 흰 테두리가 있어야 합니까?
위치 표식은 검정, 흰색, 검정, 흰색, 검정이 1:1:3:1:1 비율로 나오는 줄무늬로 찾습니다. 부호를 어두운 가장자리에 바로 붙여 찍으면 바깥 검정 테두리가 그것과 이어져 줄무늬가 사라집니다. 표준은 네 모듈 너비의 여백을 요구합니다. 무대에서 여백을 끄면 휴대폰이 실패하는 것을 볼 수 있습니다.
QR 코드에는 얼마나 들어갑니까?
버전 40 수준 L 에 숫자 7,089자리, 영숫자 4,296자, 바이트 2,953개, 한자 1,817자가 들어갑니다. 휴대폰 카메라용으로 덴소 웨이브는 약 271바이트, 버전 10의 수준 L 을 기준으로 잡으라고 권합니다.
QR 코드에 한글이나 중국어를 넣을 수 있습니까?
있습니다. 바이트 모드는 어떤 문자 집합이든 담을 수 있고, 판독기가 어느 것인지 알면 됩니다. 숫자 26을 담은 ECI 머리는 바이트가 UTF-8 이라는 뜻이고, 무대는 영문 ASCII 가 아닌 글자에 이것을 붙입니다. 덴소 웨이브는 중국어 GB2312 글자를 위한 13비트 압축 모드도 소개하는데, 휴대폰에 따라 못 읽을 수 있다고 합니다.
같은 글자인데 생성기마다 부호가 다른 까닭은 무엇입니까?
다른 모드를 고르거나, ECI 머리를 넣거나 빼거나, 더 큰 버전을 고르거나, 다른 마스크를 고를 수 있습니다. 모두 맞는 선택이고, 어떤 판독기든 두 부호를 다 읽습니다. 덴소 웨이브의 FAQ 도 같은 내용을 적어 둡니다.
마스크는 무엇을 합니까?
행과 열에 대한 정해진 규칙이 참인 데이터 모듈을 뒤집어서 큰 덩어리, 긴 줄, 위치 표식처럼 보이는 무늬를 깹니다. 인코더는 규칙 8가지를 모두 해 보고 벌점을 매겨 가장 좋은 것을 씁니다. 마스크 번호는 형식 정보에 들어가 있어서 판독기가 되돌릴 수 있습니다.
QR 코드는 무료로 써도 됩니까?
됩니다. 덴소 웨이브는 JIS 나 ISO 표준대로 만든 QR 코드를 쓰는 데 허락이나 사용료가 필요 없다고 합니다. 특허는 가지고 있지만 표준 부호에는 행사하지 않습니다. 등록 상표는 QR Code 라는 낱말이고 무늬는 아닙니다.
QR 코드는 얼마나 작게 찍을 수 있습니까?
덴소 웨이브는 보통 레이저 프린터의 가장 작은 모듈을 약 0.17 mm 로 들고, 그러면 버전 1의 너비는 약 3.57 mm 입니다. 특수 프린터와 판독기로는 0.03 mm 모듈도 있었다고 합니다. 반대로 너무 크게 찍으면 판독기 시야에 들어오지 않을 수 있다고 경고합니다.
색깔 있는 QR 코드를 만들어도 됩니까?
경우에 따라 됩니다. 판독기는 자기가 쓰는 빛에서 대비가 있어야 합니다. 빨간 빛을 쓰는 스캐너가 많아서 흰 바탕의 빨간 부호는 사라지고, 어두운 바탕에 밝은 부호는 검정 모듈을 기대하는 판독기를 헷갈리게 할 수 있습니다. 덴소 웨이브는 흰 바탕에 검정을 권하고, 다른 조합은 시험해 보라고 합니다.
QR 코드가 위험할 수 있습니까?
부호 자체는 데이터일 뿐입니다. 위험은 부호가 데려가는 곳에 있습니다. 진짜 부호 위에 덧붙인 부호가 가짜 결제 페이지로 보낼 수 있습니다. 특히 결제할 때는 열기 전에 휴대폰이 보여 주는 주소를 확인하세요.
마이크로 QR 코드는 무엇입니까?
위치 표식이 하나이고 여백이 2모듈인 작은 친척입니다. 11 x 11 부터 17 x 17 모듈까지 크기가 네 가지이고, 숫자를 35자리까지 담습니다. 2004년 11월 JIS 표준이 되었습니다.
왼쪽 아래 위치 표식 옆에는 왜 늘 검정 모듈이 하나 있습니까?
표준이 4V + 9행, 8열에 정해 두었습니다. 형식 정보 자리에 있고 아무 정보도 담지 않아서, 같은 버전의 QR 코드라면 모두 같은 자리에 있습니다.
QR 코드는 바둑판에서 영감을 받았습니까?
그런 이야기가 자주 나옵니다. 그런데 덴소가 직접 낸 2024년 인터뷰에서 하라 마사히로는 위치 표식 생각이 기차에서 건물 창문을 보다가 떠올랐다고 말하고, 바둑은 특허를 푼 것이 잘된 까닭을 설명할 때만 꺼냅니다. 격자 자체는 2차원 부호라면 당연히 필요한 모양입니다.
용어
- 모듈: 격자의 칸 하나. 검정이나 흰색입니다.
- 버전: 기호의 크기. 1(21 x 21 모듈)부터 40(177 x 177)까지입니다.
- 위치 표식: 세 모서리의 7 x 7 네모. 비율이 1:1:3:1:1 입니다.
- 분리 띠: 위치 표식을 감싸는 한 모듈 너비의 흰 테두리.
- 타이밍 패턴: 6행과 6열을 따라 번갈아 나오는 모듈.
- 정렬 패턴: 버전 2부터 있는 5 x 5 과녁. 원근과 휨을 고치는 데 씁니다.
- 여백: 기호를 둘러싼 네 모듈 너비의 흰 테두리.
- 형식 정보: 오류 정정 수준과 마스크를 담은 15비트. BCH 부호로 지키고 두 번 적습니다.
- 버전 정보: 버전 7부터 있는 18비트. 두 번 적습니다.
- 코드워드: 8비트 묶음. 오류 정정의 단위입니다.
- 블록: 자기 오류 정정 코드워드를 가진 코드워드 묶음.
- 오류 정정 수준: L, M, Q, H. 코드워드를 얼마나 복원할 수 있는지 정합니다.
- 리드-솔로몬 부호: 원소 256개인 체 위의 오류 정정 부호. 코드워드를 통째로 고칩니다.
- 신드롬: 받은 블록을 생성 다항식의 근에서 계산한 값. 모두 0이면 오류가 없습니다.
- 마스크: 읽기 어려운 무늬를 피하려고 데이터 모듈을 뒤집는 규칙.
- 모드: 글자를 비트에 담는 방식. 숫자, 영숫자, 바이트, 한자가 있습니다.
- ECI: 뒤에 오는 바이트의 문자 집합을 알려 주는 머리. 26은 UTF-8 입니다.
- 채움 바이트: 남는 용량을 채우는 236과 17.
- 남는 비트: 마지막 코드워드 뒤에 남는 모듈.
- 마이크로 QR: 위치 표식이 하나인 작은 기호. 버전 M1 부터 M4 까지입니다.
출처
- ISO/IEC 18004:2024, Information technology, Automatic identification and data capture techniques, QR code bar code symbology specification, edition 4 (published 15 August 2024). https://www.iso.org/standard/83389.html (2026년 10월 20일 확인)
- ISO/IEC 18004:2015, edition 3 (withdrawn; Annex I worked example of 01234567 at 1-M). https://www.iso.org/standard/62021.html (2026년 10월 20일 확인)
- ISO/IEC 23941:2022, Rectangular Micro QR Code (rMQR) bar code symbology specification (published May 2022). https://www.iso.org/standard/77404.html (2026년 10월 20일 확인)
- DENSO WAVE, History of QR Code (two-person team, 1:1:3:1:1 survey, about 7,000 digits, more than 10 times faster, 1994 release, patent not exercised, kanban, BSE, 2002 phones, AIM 1997, JIS 1999, ISO 2000, Micro QR 2004, iQR 2008, Frame QR 2014, Good Design Award 2012). https://www.qrcode.com/en/history/ (2026년 10월 20일 확인)
- DENSO WAVE, Error correction feature (Reed-Solomon, codewords, level M most common, CDs and space probes, burst errors). https://www.qrcode.com/en/about/error_correction.html (2026년 10월 20일 확인)
- DENSO WAVE, Information capacity and versions of the QR Code (21 x 21 to 177 x 177, 4 modules per version, 100 digits at M in version 3). https://www.qrcode.com/en/about/version.html (2026년 10월 20일 확인)
- DENSO WAVE, QR Code standardization (AIM October 1997, JEIDA-55 March 1998, JIS X 0510 January 1999, ISO/IEC 18004 June 2000, Micro QR JIS November 2004, GS1 December 2011; capacities; levels about 7, 15, 25, 30 %; structured append 16 symbols; patent 2938338 waived). https://www.qrcode.com/en/about/standards.html (2026년 10월 20일 확인)
- DENSO WAVE, Micro QR Code (one finder, two-module margin, M1 to M4, capacity table, max. 35 digits). https://www.qrcode.com/en/codes/microqr.html (2026년 10월 20일 확인)
- DENSO WAVE, QR Code Model 1 and Model 2 (Model 1 version 14, 73 x 73, 1,167 digits; Model 2 alignment patterns, version 40, 7,089 digits). https://www.qrcode.com/en/codes/model12.html (2026년 10월 20일 확인)
- DENSO WAVE, rMQR Code (one and a half finder patterns, 7 x 43 to 17 x 139, 361 digits, ISO May 2022). https://www.qrcode.com/en/codes/rmqr.html (2026년 10월 20일 확인)
- DENSO WAVE, Point for determining the code area (four-module margin, 50 characters at M in version 3, 0.254 mm, 9.398 mm). https://www.qrcode.com/en/howto/code.html (2026년 10월 20일 확인)
- DENSO WAVE, Point for setting the module size (printer head density, 0.17 mm at 600 dpi with 4 dots). https://www.qrcode.com/en/howto/cell.html (2026년 10월 20일 확인)
- DENSO WAVE, FAQ (not an acronym, sushi plates and paperbacks, 3.57 mm and 0.03 mm, 271 bytes for phones, Chinese 13-bit mode, red light, same data different patterns, trademark for the word only, no fee). https://www.qrcode.com/en/faq.html (2026년 10월 20일 확인)
- DENSO WAVE, QR Code development story (1992 start, about 1,000 bar codes a day, two members, position detection patterns). https://www.denso-wave.com/en/technology/vol1.html (2026년 10월 20일 확인)
- DENSO WAVE, QR Code 30th anniversary (first mission car parts, readable with oil contamination). https://www.denso-wave.com/en/system/qr/qr30th/ (2026년 10월 20일 확인)
- DENSO DRIVEN BASE, Believing in a faint light: obstacles QR Code developer overcame and the source of his idea (interview with Masahiro Hara, as of May 2024: development from 1992, about 10 bar codes per product, the ratio found after about six months, building windows from a train, Go as a hobby). https://www.denso.com/global/en/driven-base/career-life/qr-hara_2408/ (2026년 10월 20일 확인)
- DENSO DRIVEN BASE, QR codes powering digital transformation (tQR for platform doors, damage tolerance raised from 30 % to 50 %), 25 February 2025. https://www.denso.com/global/en/driven-base/career-life/qr_engineer-1/ (2026년 10월 20일 확인)
- European Patent Office, Masahiro Hara, Motoaki Watabe, Tadao Nojiri, Takayuki Nagaya, Yuji Uchiyama, European Inventor Award 2014, Popular Prize (first UPC scan 1974, about 20 characters, 20 times faster). https://www.epo.org/en/news-events/european-inventor-award/meet-the-finalists/masahiro-hara-motoaki-watabe-tadao-nojiri (2026년 10월 20일 확인)
- Japan Patent JP 2938338 B2, 2D code, filed 14 March 1994, granted 1999 (Google Patents). https://patents.google.com/patent/JP2938338B2/en (2026년 10월 20일 확인)
- US Patent 5,726,435, Optically readable two-dimensional code and method and apparatus using the same, granted 10 March 1998 (Google Patents). https://patents.google.com/patent/US5726435A/en (2026년 10월 20일 확인)
- US Patent 2,612,994, N. J. Woodland and B. Silver, Classifying apparatus and method, filed 20 October 1949, granted 7 October 1952 (Google Patents). https://patents.google.com/patent/US2612994A/en (2026년 10월 20일 확인)
- I. S. Reed and G. Solomon, Polynomial codes over certain finite fields, Journal of the Society for Industrial and Applied Mathematics 8(2), 300 to 304, 1960. https://doi.org/10.1137/0108018 (2026년 10월 20일 확인)
- R. C. Bose and D. K. Ray-Chaudhuri, On a class of error correcting binary group codes, Information and Control 3(1), 1960. https://doi.org/10.1016/S0019-9958(60)90287-4 (2026년 10월 20일 확인)
- J. L. Massey, Shift-register synthesis and BCH decoding, IEEE Transactions on Information Theory 15(1), 1969. https://doi.org/10.1109/TIT.1969.1054260 (2026년 10월 20일 확인)
- R. T. Chien, Cyclic decoding procedures for Bose-Chaudhuri-Hocquenghem codes, IEEE Transactions on Information Theory 10(4), 1964. https://doi.org/10.1109/TIT.1964.1053699 (2026년 10월 20일 확인)
- G. D. Forney, On decoding BCH codes, IEEE Transactions on Information Theory 11(4), 1965. https://doi.org/10.1109/TIT.1965.1053825 (2026년 10월 20일 확인)
- H.-K. Chu, C.-S. Chang, R.-R. Lee and N. J. Mitra, Halftone QR codes, ACM Transactions on Graphics 32(6), 2013. https://doi.org/10.1145/2508363.2508408 (2026년 10월 20일 확인)
- EMVCo, EMVCo publishes QR code payment specifications to promote global interoperability, 31 July 2017. https://www.emvco.com/wp-content/uploads/news/EMVCo-QR-Code-Specification-Launch-FINAL-v1.pdf (2026년 10월 20일 확인)
- EMVCo, EMV QR Codes. https://www.emvco.com/emv-technologies/qr-codes (2026년 10월 20일 확인)
- Monetary Authority of Singapore, Singapore introduces world's first unified payment QR code, SGQR, 17 September 2018. https://www.mas.gov.sg/news/media-releases/2018/singapore-introduces-worlds-first-unified-payment-qr-code (2026년 10월 20일 확인)
- Banco Central do Brasil, Pix starts its full operation with 734 institutions on November 16, 2020. https://www.bcb.gov.br/en/pressdetail/2361/nota (2026년 10월 20일 확인)
- Ministry of Health and Welfare (Korea), official blog, KI-Pass electronic entry logs nationwide from 10 June, June 2020. https://blog.naver.com/mohw2016/221995921830 (2026년 10월 20일 확인)
- GOV.UK, Businesses urged to prepare for NHS COVID-19 app, 11 September 2020 (launch and QR check-in on 24 September). https://www.gov.uk/government/news/businesses-urged-to-prepare-for-nhs-covid-19-app (2026년 10월 20일 확인)
- Council of the European Union, EU digital COVID certificate: how it works (1 July 2021 to 30 June 2023, QR code with digital signature). https://www.consilium.europa.eu/en/policies/coronavirus-pandemic/eu-digital-covid-certificate (2026년 10월 20일 확인)
- IATA, Bar Coded Boarding Pass (BCBP) implementation guide, version 7, 2021 (PDF417, Aztec, DataMatrix, QR code; 1D bar codes limited to about 30 characters). https://www.iata.org/contentassets/1dccc9ed041b4f3bbdcf8ee8682e75c4/2021_03_02-bcbp-implementation-guide-version-7-.pdf (2026년 10월 20일 확인)
- GS1 US, What is GS1 Sunrise 2027? https://www.gs1us.org/industries-and-insights/by-topic/sunrise-2027 (2026년 10월 20일 확인)
- GS1, GS1 Digital Link. https://www.gs1.org/standards/gs1-digital-link (2026년 10월 20일 확인)
- GS1, GS1 barcodes. https://www.gs1.org/standards/barcodes (2026년 10월 20일 확인)





