QR 코드 생성기
QR 코드를 만들고 그 뒤의 결정까지 봅니다. 모드 분할, 버전, 오류 정정 수준, 여덟 마스크의 점수, 가운데 로고의 실제 비용.
https://seladevtools.com/qr-code-generator
버전 3 · 29×29 모듈 · 레벨 M · 마스크 7
- 버전
- 3 · 29×29 모듈
- 수준
- M
- 마스크
- 7 (감점 최소)
- 데이터
- 352비트 중 348비트
- 코드워드
- 데이터 44 + 정정 26, 1개 블록
세그먼트
| 모드 | 문자 수 | 비트 |
|---|---|---|
| byte | 42 | 348 |
마스크 감점
| 마스크 | 연속 | 덩어리 | 위치 찾기 유사 | 균형 | 합계 |
|---|---|---|---|---|---|
| 0 | 325 | 351 | 120 | 0 | 796 |
| 1 | 331 | 375 | 280 | 0 | 986 |
| 2 | 294 | 345 | 280 | 0 | 919 |
| 3 | 322 | 345 | 160 | 0 | 827 |
| 4 | 330 | 330 | 120 | 0 | 780 |
| 5 | 312 | 348 | 160 | 0 | 820 |
| 6 | 322 | 351 | 320 | 0 | 993 |
| 7 | 289 | 273 | 160 | 0 | 722 |
네 규칙은 같은 색이 길게 이어지는 것, 2×2 덩어리, 스캐너가 위치 찾기 패턴으로 착각하는 1:1:3:1:1 배열, 그리고 어두운 모듈 비율이 절반에서 멀어지는 것을 감점합니다. 가장 낮은 것이 이깁니다. 행을 클릭하면 고정됩니다.
모든 QR 코드 안에는 네 가지 결정이 숨어 있다
QR 생성기에 텍스트를 붙여 넣으면 흑백 사각형이 나옵니다. 그러나 보여주지 않는 것이 있습니다. 인코더가 방금 당신을 대신해 서로 다른 네 가지 결정을 내렸다는 사실입니다. 하나하나가 결과를 바꾸고, 하나하나가 다르게 내려질 수도 있었습니다.
이 도구는 네 가지를 모두 보여줍니다. 거기가 흥미로운 부분이기 때문입니다. 일단 보이기 시작하면 제멋대로처럼 느껴지던 동작 — 문자 하나 더했을 뿐인데 코드가 한 단계 커지고, 어떤 코드에서는 되던 로고가 다음 코드에서는 안 되는 일 — 이 더는 제멋대로가 아니게 됩니다.
- 모드 분할: 표준은 문자를 담는 네 가지 방식을 정의하고, 텍스트는 그 사이에서 나뉩니다.
- 버전: 1에서 40까지의 수로, 격자를 21×21에서 177×177 모듈 사이로 고정합니다.
- 오류 정정 수준: L, M, Q, H 중 하나로, 심벌이 얼마나 망가져도 읽히는지를 정합니다.
- 마스크: 데이터 위에 XOR로 겹치는 여덟 패턴 중 하나로, 스캐너를 헷갈리게 하는 모양을 깨뜨립니다.
넷 중 어느 것도 취향의 문제가 아닙니다. 나머지가 정해지면 각각에 옳은 답이 있고, 바로 그래서 지켜볼 가치가 있습니다. 서로 영향을 주고받기 때문입니다.
텍스트를 나누는 일은 최단 경로 문제
숫자 모드는 세 자리마다 10비트를 씁니다. 영숫자 모드는 두 문자마다 11비트를 쓰며 대상은 45자 — 숫자, 대문자, 공백, 그리고 아홉 개의 구두점입니다. 바이트 모드는 UTF-8 1바이트당 8비트입니다. kanji 모드는 바이트 모드라면 24비트가 드는 문자를 13비트로 처리합니다.
그래서 가장 싼 부호화가 문자열 전체를 한 모드로 처리하는 경우는 드뭅니다. 그렇다고 전환이 공짜인 것도 아닙니다. 세그먼트마다 4비트 모드 지시자와 문자 수 필드를 지불합니다. 숫자 묶음을 따로 떼어낼 값어치가 있는지는 그 길이에 달려 있습니다. 그래서 분할은 최단 경로 문제가 되고, 이 인코더는 어림짐작이 아니라 정확히 풀어냅니다.
HELLO12345678901234567890 as one alphanumeric segment 4 + 9 + (11 x 12) + 6 = 151 bits split at the digits 4 + 9 + (11 x 2) + 6 = 41 bits 4 + 10 + (10 x 6) + 7 = 81 bits total = 122 bits
29비트, 버전 1에서는 들어가느냐 마느냐의 차이입니다. 페이지의 세그먼트 표에는 인코더가 실제로 고른 분할과 각 세그먼트의 비용이 나오므로, 어떤 문자가 비싼지 볼 수 있습니다.
버전과 분할은 서로를 쫓는다
순진한 인코더를 틀리게 만드는 대목이 여기입니다. 문자 수 필드는 폭이 고정이 아닙니다. 바이트 모드에서는 버전 1에서 9까지 8비트, 버전 10부터는 16비트이고, 숫자 모드는 같은 경계에서 10, 12, 14로 바뀝니다.
즉 분할의 비용은 버전에 달려 있고, 버전은 분할의 비용에 달려 있습니다. 빠져나갈 길은 버전 그룹이 셋뿐임을 알아차리는 것입니다. 분할을 그룹마다 한 번씩 계산하고, 그중 어느 하나라도 들어가는 가장 작은 버전이 이깁니다.
- 버전 1–9: 숫자 10비트, 영숫자 9, 바이트 8, kanji 8.
- 버전 10–26: 숫자 12, 영숫자 11, 바이트 16, kanji 10.
- 버전 27–40: 숫자 14, 영숫자 13, 바이트 16, kanji 12.
마스크는 네 가지 감점 규칙으로 고른다
QR 코드의 데이터는 거의 무작위이고, 무작위한 흑백은 스캐너가 찾고 있는 구조 패턴으로 착각할 만한 모양을 만들어냅니다. 해결책은 그런 모양을 깨뜨리도록 고른 규칙적인 패턴을 데이터 영역에 XOR로 겹치는 것입니다. 패턴은 여덟 개이고, 인코더는 전부 시도합니다.
마스크를 씌운 각 심벌은 표준의 네 규칙으로 채점되며 합계가 가장 낮은 것이 이깁니다. 페이지의 표에는 여덟 점수가 규칙별 내역과 함께 나오고, 행을 클릭하면 그 마스크로 고정해 효과를 볼 수 있습니다.
- 연속: 행이나 열에서 같은 색 모듈이 다섯 개 이어지면 3점, 그 뒤로 한 모듈마다 1점.
- 덩어리: 한 가지 색으로 된 2×2 영역마다 3점.
- 위치 찾기 유사: 밝은 모듈 넷에 붙은 어두움-밝음-어두움-밝음-어두움의 1:1:3:1:1 배열에 40점 — 모서리 사각형을 닮은 패턴입니다.
- 균형: 어두운 모듈 비율이 절반에서 멀어질 때 온전한 5%마다 10점.
여기서 구현마다 해석이 조금씩 갈립니다. 1:1:3:1:1 패턴을 더 큰 배율에서도 세는지, 그리고 형식 정보를 점수에 넣는지가 그것입니다. 이 인코더는 대부분의 휴대폰 카메라가 돌리는 ZXing의 해석을 따르며, 독립적인 두 구현에 대해 고정되어 있습니다. 이 불일치가 무효한 코드를 만드는 일은 결코 없습니다. 읽히는 데 아무 문제 없는 여러 마스크 가운데 무엇이 뽑히는지를 정할 뿐입니다.
가운데 로고가 실제로 치르는 비용
모두가 같은 규칙을 되뇝니다. 수준 H는 30%를 복원하니 코드의 30%까지 덮어도 된다고요. 답의 모양부터 틀렸고, 그대로 따르다 보면 언젠가 스캔되지 않는 코드를 손에 쥐게 됩니다.
QR 코드의 오류 정정은 하나의 공동 자산이 아닙니다. 데이터는 Reed-Solomon 블록으로 나뉘고 각 블록은 자기 정정 코드워드를 가지며, 블록들은 격자 전체에 교차 배치됩니다. 긁힘이 한 블록을 크게 망치는 대신 여러 블록을 조금씩 건드리게 하려는 것입니다. 각 블록은 정정 코드워드의 절반쯤까지 잃어도 다시 세워집니다. 가운데 로고는 꽉 찬 사각형이고, 바로 그 모양을 흩뜨리려고 교차 배치를 하는 것이지만, 흩어짐이 고른 적은 없습니다.
그러니 물어야 할 것은 심벌의 몇 퍼센트가 덮였는지가 아닙니다. 가장 크게 다친 블록이 얼마나 잃었는지입니다. 이 페이지는 어느 모듈이 어느 코드워드에 속하고 그 코드워드가 어느 블록에서 왔는지 알기에 곧바로 답할 수 있습니다. 로고를 올리면 블록별 손상과 최악 블록에 남은 여유를 알려줍니다.
- 위치 찾기 패턴이나 타이밍 패턴, 형식 정보를 덮는 것은 예산 문제가 아닙니다. 거기에는 정정이 없고, 그것을 찾지 못한 스캐너는 정정 단계에 이르지도 못합니다.
- 코드워드의 절반이라는 수치는 상한입니다. 인쇄와 반사와 굽은 표면과 마모가 같은 예산을 쓰므로, 화면에서 딱 한계인 코드는 머그컵 위에서는 이미 한계를 넘습니다.
- 더 큰 로고를 위해 수준을 H로 올리면 심벌이 커지고, 같은 인쇄 크기라면 모듈 하나가 작아집니다. 이득이 아니라 손해일 때도 있습니다.
페이로드 형식과 그것이 무는 자리
Wi-Fi QR 코드나 연락처 카드는 스캐너가 알아보는 모양으로 정리한 텍스트일 뿐입니다. 모양 자체는 단순합니다. 실제 코드가 망가지는 곳은 이스케이프 규칙이고, 그것은 소리 없는 실패입니다. 코드는 말끔히 읽히면서 엉뚱한 답을 내놓습니다.
WIFI:T:WPA;S:Cafe\; Bar;P:p\:ssw\,rd;; BEGIN:VCARD VERSION:3.0 N:Lovelace;Ada;;; FN:Ada Lovelace ORG:Analytical Engines\, Ltd END:VCARD
Wi-Fi 형식에서 세미콜론은 필드를 끝냅니다. 그래서 세미콜론이 든 비밀번호는 이스케이프하지 않으면 자격 증명을 도중에 잘라버립니다. 쉼표, 콜론, 따옴표, 역슬래시도 마찬가지입니다. 16진 숫자로만 이루어진 네트워크 이름은 따옴표로 감싸야 하며, 그러지 않으면 텍스트가 아니라 16진값으로 읽힙니다. vCard에서 구분자는 세미콜론과 쉼표이고, 75옥텟을 넘는 줄은 공백으로 시작하는 이어짐 줄로 접어야 하며, 줄 끝은 CRLF입니다.
여기의 빌더는 그 모두를 적용하고 무엇을 했는지 말합니다. 입력을 소리 없이 고쳐 쓰지 않습니다. 필드 아래에 지적이 뜬다면 텍스트의 무언가가 손질을 필요로 했다는 뜻이고, 스티커 천 장을 찍기 전에 알아둘 만한 일입니다.
자주 묻는 질문
- 문자 하나 더했을 뿐인데 코드가 왜 훨씬 커졌나요?
- 모드 분할이나 버전, 또는 둘 다가 바뀌었기 때문입니다. 모두 대문자인 문자열에 소문자 하나를 넣으면 세그먼트 전체가 영숫자 모드에서 바이트 모드로 밀려날 수 있고, 문자당 5.5비트가 8비트가 됩니다. 버전 9에서 10으로 넘어가는 것만으로도 문자 수 필드가 모두 넓어집니다. 비트가 어디로 갔는지는 세그먼트 표에 나옵니다.
- 오류 정정 수준은 무엇을 고를까요?
- M이 무난한 기본값이고 실제로 쓰이는 코드 대부분이 M입니다. 작게 인쇄하거나, 굽은 면에 붙이거나, 손을 타는 물건에 넣거나, 가운데를 로고로 덮을 때는 Q나 H로 가세요. L은 페이로드가 길고 화면으로 읽힐 때만 쓰세요. 수준을 올린다고 신뢰성이 공짜로 오르지는 않습니다. 같은 데이터에서 심벌이 커지고, 같은 인쇄 크기라면 모듈이 작아집니다.
- 가운데에 넣을 로고는 얼마나 클 수 있나요?
- 올려보면 페이지가 답해줍니다. 정직한 답은 버전과 수준, 그리고 블록이 어디에 떨어지는지에 달려 있기 때문입니다. 페이지가 하지 않는 일은 30% 규칙을 되뇌는 것입니다. 그것은 넓이가 아니라 코드워드의 이야기이고, 최악의 블록이 아니라 심벌 전체의 이야기입니다. 출발점으로는 수준 H에서 한 변의 15%는 대체로 넉넉하고 25%는 대체로 무리입니다.
- URL을 대문자로 쓰면 정말 코드가 작아지나요?
- 자주 그렇습니다. 영숫자 모드에는 소문자가 없어서 소문자 URL은 문자당 8비트인 바이트 모드로 가고, 대문자면 5.5비트인 영숫자 모드에 들어갑니다. 스킴과 호스트는 대소문자를 구분하지 않으므로 HTTPS://EXAMPLE.COM은 https://example.com과 똑같이 동작합니다. 다만 경로는 구분하므로 건드리면 안 됩니다. 페이지는 당신의 실제 URL에서 절약분을 재고, 도움이 될 때만 변경을 제안합니다.
- 일본어 텍스트에 kanji 모드가 쓸모 있나요?
- 있습니다. 바이트 모드 UTF-8이 24비트인 자리를 문자당 13비트로 처리하므로 일본어 텍스트가 거의 절반 크기로 나옵니다. 대상은 Shift_JIS 2바이트 범위로, 가나와 JIS X 0208 한자는 물론 그리스 문자와 키릴 문자까지 포함합니다. 이 페이지는 텍스트가 순수 ASCII가 아닐 때만 대응표를 불러오므로, URL만 담은 코드는 그것을 내려받지 않습니다.
- UTF-8 선언은 켜야 하나요?
- 대개는 아닙니다. 표준은 ECI 헤더가 달리 말하지 않는 한 바이트 모드가 ISO-8859-1이라고 하지만, 실제로 이번 세기의 스캐너는 모두 UTF-8로 다루고 이 인코더도 그렇게 씁니다. 명시적 선언은 12비트가 들고 오래된 산업용 판독기를 헷갈리게 합니다. ECI 지원을 문서로 밝힌 특정 판독기를 겨냥할 때만 켜세요.
- Micro QR이나 여러 조각 코드는 왜 없나요?
- 둘 다 표준에 있고 둘 다 스캔되지 않는 물건을 안겨줄 것이기 때문입니다. Micro QR은 용량표와 마스크 집합과 형식 부호화가 모두 다른 별개의 심벌 체계이고, 대부분의 휴대폰 카메라 앱은 읽지 못합니다. Structured Append는 페이로드를 최대 열여섯 개 심벌로 나누지만, 그것을 다시 합치는 소비자용 스캐너는 사실상 없습니다. 데이터가 버전 40에 들어가지 않는다면 답은 코드에 URL을 넣고 데이터는 그 뒤에 두는 것입니다.
- QR 코드는 얼마나 작게 인쇄할 수 있나요?
- 흔한 지침은 인쇄에서 모듈이 최소 0.4mm이고, 코드 크기는 읽는 거리의 약 10분의 1을 버전 치수로 나눈 값이라는 것입니다. 다만 실무의 제약은 여백 구역입니다. 표준은 사방에 네 모듈의 깨끗한 여백을 요구하며, 현실에서 가장 잦은 실패는 다른 그래픽에 바짝 붙인 코드입니다. 그 계산에 필요한 버전과 모듈 수는 페이지에 나와 있습니다.