데이터에서 패턴까지
QR코드를 만들 때는 먼저 데이터에 맞는 인코딩 모드(숫자, 영숫자, 바이트, 한자)를 골라요. 인코더는 데이터를 비트로 바꿔 8비트 코드워드로 나누고, 선택한 레벨에 따라 리드-솔로몬 오류 정정 코드워드를 더해요. 그런 다음 데이터가 들어가는 가장 작은 버전을 골라요.
코드워드는 고정 패턴을 건너뛰는 지그재그 경로를 따라 격자에 배치돼요. 마지막으로 인코더는 큰 빈 영역이나 헷갈리는 모양이 생기지 않도록 여덟 가지 마스크 패턴 중 하나를 적용하고, 마스크와 오류 정정 레벨을 포맷 정보에 기록해요.
- 인코딩 모드 선택
- 데이터 인코딩 및 오류 정정 코드워드 추가
- 버전(크기) 선택
- 파인더, 타이밍, 정렬 패턴 배치
- 데이터 모듈 채우기
- 여덟 가지 마스크 중 가장 좋은 것을 적용하고 포맷 정보 기록
카메라 이미지에서 데이터까지
해독은 같은 단계를 거꾸로 실행해요. 스캐너는 대부분의 이미지에서 눈에 띄는 어둡고 밝은 1:1:3:1:1 비율을 가진 파인더 패턴 세 개를 찾고, 이를 타이밍 패턴 및 정렬 패턴과 함께 사용해 격자를 매핑해요. 포맷 정보를 읽고, 마스크를 벗기고, 코드워드를 모아요.
이어서 리드-솔로몬 디코딩이 잘못 읽은 코드워드를 오류 정정 레벨의 한계까지 복구해요. 손상이 너무 크면 코드는 잘못된 데이터를 내놓는 대신 읽기에 실패해요. QR코드가 엉뚱한 결과를 내는 일이 드문 이유예요.
크기와 대비가 중요한 이유
모든 단계는 카메라가 어두운 모듈과 밝은 모듈을 구별할 수 있다는 데 달려 있어요. 작은 모듈, 낮은 대비, 빛 반사, 흐림, 없는 콰이어트 존은 모두 더 많은 모듈을 불확실하게 만들고, 오류 정정이 흡수할 수 있는 양에는 한계가 있어요. 데이터를 짧게, 대비를 강하게, 여백을 깨끗하게 유지하면 디코더가 가장 쉽게 읽을 수 있어요.