QR코드 생성 방법 (5)
만약 한 색이 다른 색보다 엄청나게 많거나, 데이터 내부에서 "파인더 패턴"과 비슷한 모양이 나타난다면, 디코더 어플리케이션은 오류를 일으킬 수 있다. 이를 방지하기 위해서, QR코드를 생성할 때에는 8가지 마스크 중 가장 적절한 것을 선택해야 한다.
"파인더 패턴", "타이밍 패턴" 등을 제외한 데이터 코드에만 마스크를 적용한다.
QR코드에는 총 8가지의 마스크 패턴이 존재한다. 마스크 패턴 지시자는 3bit 바이너리 데이터로 나타내어진다.
마스크 패턴 지시자 | 조건 |
---|---|
000 | (i+j) % 2 = 0 |
001 | i % 2 = 0 |
010 | j % 3 = 0 |
011 | (i+j) % 3 = 0 |
100 | ((i / 2)+(j / 3)) % 2 = 0 |
101 | (ij) % 2 + (ij) % 3 = 0 |
110 | ((ij) % 2 +(ij) % 3) % 2 = 0 |
111 | ((ij) % 3 + (i+j) % 2) % 2 = 0 |
마스크 패턴 000 같은 경우에는,
(20,20) : (20+20) mod 2 = 0이므로 bit를 반전시킨다.
(19,20) : (19+20) mod 2 = 1이므로 bit를 반전시키지 않는다.
위의 마스크 패턴들 중 하나를 선택하기 위해 결과를 예상할 필요가 있다. 아래의 표로 계산했을 때 최소의 가중치를 갖고 있는 것을 선택하면 된다. 참고로, 조건들은 모든 칸에 적용된다.
특성 | 조건 | 가중치 |
---|---|---|
한 행이나 한 열에서 같은 색이 계속 반복됨 | (5+i)개의 단위 정사각형의 색이 같음 | 3+i |
한 개의 색만을 가지고 있는 블럭이 존재함 | 블럭의 크기 : 2*2 | 3 |
b1:w1:b3:w1:b1패턴이 행이나 열에 나타남 | b는 검은색 칸, w는 하얀색 칸을 의미함 | 40 |
각 색의 비율이 10% 이상 차이남 | 한 색의 비율 = 50±(5+k)% ~ 50±(5+(k+1))% | 10*k |
필자는 마스크 패턴을 정확히 결정하는 것이 그렇게 중요하지는 않다고 생각한다.
사실 JIS X0510(1999) 부록 8과 JIS X0510(2004) 부록 G는 같은 데이터로 하더라도 다른 결과가 나온다. 그리고 아래의 결과는 정확히 맞는 것이 아닐 수도 있다.
예제 데이터는 마스크 패턴을 "011"로 선택하겠다.