◀ 실험실로

QR코드는 4분의 1을 가려도 찍힌다고?

정보 · 부호
QR코드 · 오류정정 H · 버전 1
지운 칸 0%
판독 성공
내용 검사 고침 못 고침
약 65%가 검사 칸
오류정정
부호
잡음을 이기는 법 · 섀넌 1948
지운 칸0%
판독-
고친 단어-
읽은 글-
내용 검사 고친 단어 못 고친 단어

QR코드 만들기

검사 칸을 얼마나 붙일까. 클수록 많이 망가져도 읽혀요
글자가 많으면 알아서 더 커져요. 1이면 21×21칸, 40이면 177×177칸

망가뜨리기

%
영상처럼 오른쪽 아래 구석에서 둥글게. 정보 칸 중 몇 %를 뜯을까
무대 위를 문질러요. 손가락으로도 돼요
%
QR 한 변의 몇 %를 한 번에 칠할까
종이가 없는 칸을 카메라가 흰색으로 볼지 검정으로 볼지. 영상은 둘 다 시험했어요

얼마나 버틸까

지금 QR을 깨끗한 상태에서 두 가지 방식으로 재요

미션

  1. 이 실험의 미션을 불러오는 중…

미션 달성은 이 기기에만 기록돼요. 결과는 계산을 읽기만 하고 바꾸지 않아요.

무슨 실험인가요?

QR코드는 까만 칸과 하얀 칸이 모인 그림입니다. 그런데 이 칸의 상당수는 글자를 담은 칸이 아니라 검사 칸이에요. 글자(내용)에서 계산해 만든 값이라서, 일부가 지워져도 남은 칸과 검사 칸을 맞춰 보면 지워진 내용을 계산으로 되찾을 수 있습니다. 이 방식을 리드-솔로몬 오류정정 부호라고 부르고, 섀넌이 1948년에 길을 연 「잡음을 이기는 부호」의 한 갈래입니다.

여기서는 글자를 넣어 진짜 QR을 만들고, 오른쪽 아래를 뜯거나 붓으로 칸을 가리고 뒤집은 다음, 진짜 복호 계산으로 읽혀지는지 판정합니다. 무대 오른쪽의 띠 한 줄 한 줄은 코드 단어(칸 8개 묶음) 하나입니다. 금색은 내용, 청록색은 검사이고, 고쳐진 단어는 초록색, 못 고친 단어는 빨간색으로 바뀝니다. QR 위에 마우스를 올리면 그 칸이 속한 띠에 흰 테두리가 생겨요.

조건을 바꾸면

  • 오류정정 수준이 L→M→Q→H로 갈수록 검사 칸이 많아져서 더 많이 망가져도 읽히지만, 같은 글자가 더 큰 QR이 됩니다.
  • 오른쪽 아래부터 뜯기는 영상 실험과 같습니다. 구석에서 둥글게 뜯으면 망가진 칸이 한곳에 모여서, 영상 값(H 수준 「HI SHANNON」)에서는 25.0%를 뜯어도 읽히고 27.9%에서 처음 못 읽습니다.
  • 뒤집기 붓으로 칸을 여기저기 흩어서 바꿔 보세요. 같은 양을 망가뜨려도 훨씬 일찍 못 읽게 됩니다. 검사 칸은 코드 단어 하나가 틀리면 한 개로 치기 때문에, 틀린 칸이 여러 단어에 퍼질수록 불리합니다. 아래 「한계 재기」가 두 경우를 숫자로 비교해 줍니다.
  • 가려진 칸을 읽는 법은 종이가 사라진 칸을 흰색으로 볼지 검정으로 볼지입니다. 영상은 둘 다 시험했고, 「둘 다」는 둘 다 읽혀야 성공으로 칩니다.
  • 최소 크기를 키우면 같은 글자도 더 큰 QR이 됩니다. 칸이 많아지면 코드 단어도 늘고 여러 묶음으로 나뉘어, 묶음마다 따로 검사합니다.

계산 규칙과 영상과의 차이, 한계

글자는 숫자·영문 대문자·바이트(UTF-8) 중 알맞은 방식으로 담고, 버전 1~40, 수준 L·M·Q·H의 규격 그대로 코드 단어와 검사 단어(GF(256) 위의 리드-솔로몬)를 만들어 칸에 배치합니다. 마스크 고르는 방식은 영상을 만든 도구(segno)와 같아서, 영상의 QR 그림과 칸까지 똑같습니다. 읽는 쪽은 형식 칸(수준·마스크)과 버전 칸을 BCH 부호로 읽고, 코드 단어를 묶음별로 모아 Berlekamp–Massey 방식으로 오류 위치와 크기를 계산해 고칩니다. 묶음 하나는 검사 단어 수의 절반(내림)까지 틀린 단어를 고칩니다. 고친 뒤 글자가 처음과 다르면 「엉뚱하게 읽힘」으로 알려 줍니다. 한계를 넘으면 못 읽기만 하는 게 아니라 틀린 답이 나올 수도 있습니다.

영상과 다른 점. 영상의 판독은 OpenCV 판독기였고, 여기는 이 페이지에 직접 구현한 판독기입니다. 그래도 영상 값에서는 똑같이 25.0%(반지름 7.5칸)에서 읽히고 27.9%(반지름 8.0칸)에서 못 읽습니다. 다만 이 판독기는 카메라처럼 QR의 위치를 찾는 단계가 없어서 칸의 위치는 이미 안다고 가정하고, 형식 칸·버전 칸·코드 단어 칸만 씁니다. 실제 카메라는 세 모서리의 찾기 무늬가 필요하므로 그 무늬를 크게 지우면 여기서는 읽혀도 현실에선 못 읽을 수 있습니다. 또 영상은 찾기 무늬 같은 무늬 칸을 건드리지 않았지만, 여기서는 붓이 무늬 칸도 지울 수 있고 그 손상 수를 따로 알려 줍니다.

「표준이 말하는 복구 용량」(L 약 7%, M 약 15%, Q 약 25%, H 약 30%)은 틀린 코드 단어가 전체에서 차지하는 최대 비율입니다. 칸 기준으로는 모여서 망가질수록 이 숫자보다 훨씬 많이 버티고, 흩어질수록 훨씬 적게 버팁니다. 그래서 「한계 재기」는 두 방식(구석에서 뜯기, 시드로 정한 무작위 뒤집기)으로 지금 QR을 직접 읽어 가며 처음 못 읽는 곳을 찾습니다. 큰 버전에서는 몇 초 걸릴 수 있어 진행률을 보여 주고 중단할 수 있어요.

이 실험의 QR은 영상처럼 화면에 도트로 그린 그림이고, 실제 휴대폰으로 읽는 건 아닙니다. 아주 큰 버전은 한 칸이 화면에서 1~2도트라 붓으로 칸 하나를 집기 어렵고, 붓 자국은 링크에 담기 때문에 많이 칠하면 링크가 길어집니다.

이 실험의 원본 영상QR코드는 4분의 1을 가려도 찍힌다고? 오류 정정 부호▶ 유튜브에서 보기

다른 카트리지

재밌었다면 채널에 새 실험 영상이 계속 올라와요.

▶ 채널 구독