본문으로 건너뛰기

읽히는 한도 안에서
최대한 비워낸 QR

보통 QR은 검정이 절반쯤입니다. 규격을 건드리지 않고 그 절반을 10분의 1까지 덜어냅니다.

같은 주소, 같은 스캐너

48%일반 QR 코드. 데이터 영역의 절반 가까이가 검정입니다.
14%Barely QR. 가운데가 통째로 비었지만 같은 주소를 가리킵니다.

빈 자리를 만드는 게 아니라, 원래 있던 자리를 비우는 것

회색 바탕이 우리가 마음대로 칠할 수 있는 영역입니다. 전체의 70퍼센트 가까이 되고, 붉은 점만이 실제로 의미를 가진 데이터입니다.
남는 칸을 만든다
주소보다 큰 규격을 고르면 남는 칸이 생깁니다. 규격은 이 자리를 정해진 쓰레기값으로 채우라고 말합니다. QR이 촘촘해 보이는 이유의 상당 부분이 여기에 있습니다.
마스크를 거꾸로 푼다
QR은 마지막에 격자무늬를 XOR로 덧씌웁니다. XOR은 같은 값끼리 만나면 0이 되니, 덧씌울 값과 똑같은 값을 미리 넣어두면 두 값이 상쇄되어 흰색이 됩니다.
읽는 쪽은 신경 쓰지 않는다
디코더는 종료 신호를 만나면 그 뒤를 읽지 않습니다. 남는 칸에 무엇이 들어 있든 결과는 같습니다. 그래서 이 영역은 사실상 우리 캔버스입니다.

전체 원리와 실측 데이터 읽기

얼마나 비워지는지는 복원 레벨이 정합니다

오류 복원용 코드는 우리가 손댈 수 없는 영역이라 그대로 검정으로 남습니다. 복원 레벨을 올릴수록 이 영역이 커지고, 그만큼 여백이 줄어듭니다.

복원 레벨과 규격 크기에 따른 검정 모듈 비율
레벨V2V5V10쓰임새
L27%15%12%화면 공유
M34%21%21%기본 권장
Q38%32%29%명함, 스티커
H해당 없음40%34%인쇄물, 야외

같은 주소를 각 설정으로 인코딩해 데이터 영역의 검정 모듈을 센 값입니다. 참고로 일반 QR은 어느 설정에서나 47% 안팎입니다.

자주 묻는 질문

규격을 어기는 건가요?
남는 칸에 넣는 값만 규격과 다릅니다. 사용한 마스크 번호는 규격대로 기록하고 오류 복원 코드도 정상으로 계산하므로, 디코더는 평범한 QR로 읽습니다. 설정에서 완전 준수 모드를 고르면 남는 칸까지 규격대로 채웁니다.
어떤 스캐너에서나 읽히나요?
만들 때마다 브라우저 안에서 실제 디코더로 읽어보고 결과를 알려드립니다. 다만 아이폰 기본 카메라, 카카오톡, 네이버 앱은 각각 다른 디코더를 씁니다. 중요한 곳에 쓸 QR이라면 실제 기기로 꼭 확인하세요.
왜 어떤 설정은 읽히다 말다 하나요?
넓은 흰 영역에는 스캐너가 밝기 기준을 잡을 단서가 없습니다. 어두운 곳이나 흔들린 사진에서는 없던 점이 생기고, 복원 코드가 그걸 다 메우지 못하면 실패합니다. 복원 레벨을 올리거나 규격을 한 단계 줄이면 해결됩니다.
입력한 주소가 서버에 저장되나요?
저장되지 않습니다. 인코딩부터 이미지 생성까지 전부 브라우저 안에서 처리하고, 주소를 서버로 보내지 않습니다. 주소를 줄여주는 기능도 없으므로 중간에 거치는 리다이렉트도 없습니다.
주소가 너무 길다고 나옵니다
현재 규격 10까지 지원합니다. 복원 레벨 L 기준으로 일반 주소는 271자, 영문 대문자와 숫자만 쓰면 395자까지 들어갑니다. 대문자 전용 모드가 두 글자를 11비트에 욱여넣기 때문인데, 주소 경로를 대문자로 바꿀 수 있다면 QR을 한두 단계 작게 만들 수 있습니다.