QR코드 생성 방법 (2)

처음으로   이전 페이지   다음 페이지


주의: 이 페이지는 번역 오류를 포함하고 있을 수도 있습니다.

2. 인코딩 방법

이 문서는 복잡한 조건(코드의 분할 등)이 전혀 없는 쉬운 예제를 가지고 인코딩하는 방법을 설명한다.

2.1 데이터의 최대 개수

QR코드에 들어가는 데이터의 최대 개수는 버전과 오류 정정 단계, 그리고 인코딩 모드에 따라서 결정된다.
예를 들어, 오류 정정 단계가 Q인 레벨 1의 QR코드에는 27개의 숫자 정보 또는 16개의 알파벳+α 정보 또는 11개의 8bit 정보가 저장될 수 있다. (표1을 참고하여라.)
오류 정정 단계가 높아지면 데이터의 최대 개수가 줄어들어 같은 데이터가 입력됐을 때 더 높은 버전이 필요할 수 있으므로, 먼저 오류 정정 단계를 고려하고 나서 버전을 결정해야 한다.

2.2 데이터 코드로 인코딩

QR코드에서 8bit 데이터는 "데이터 코드"라고 불린다. 여기서 주어진 데이터를 계산하는 등의 방법을 통하여 데이터 코드를 만들 것이다.

이제 "ABCDE123" 이라는 예제 데이터를 가지고 버전 1, 오류 정정 단계 H(이하 1-H라 한다.)로 QR코드를 만드는 과정을 알아보자.

2.2.1 모드 지시자

먼저, 모드 지시자는 바이너리 데이터를 가진 4bit로 이루어진다.

숫자 모드 : 0001
알파벳+α 모드 : 0010
8bit 모드: 0100
KANJI 모드 : 1000

예제 데이터는 알파벳이므로 알파벳+α 모드를 선택한다.

0010

2.2.2 데이터 개수 지시자

데이터 개수 지시자는 각 모드에서 저장된 데이터의 개수를 나타낸다.

버전 1-9의 경우, 1개의 단위당 차지하는 bit의 수는 아래과 같다.

숫자 : 10bit
알파벳+α : 9bit
8bit : 8bit
KANJI : 8bit

예제 데이터는 8개의 문자를 가지고 있으므로, 8을 9bit 바이너리 데이터로 인코딩한다.

0010 000001000

2.2.3 데이터 인코딩

다음으로 데이터를 바이너리 데이터로 인코딩하는 방식을 생각해 보아야 한다.

숫자 모드에서는, 데이터는 각각 3자리의 숫자들로 나뉜다.
예로 "123456"은 "123"과 "456"으로 나뉜다. 순서는 바뀌지 않는다.
또한 각각의 나뉜 데이터는 10bit 바이너리 데이터로 인코딩된다.

만약 나뉜 데이터에 숫자가 1개 또는 2개라면 각각 4bit와 7bit의 바이너리 데이터로 인코딩해야 한다.
예로 "9876"은 "987"과 "6"으로 나뉘는데, "987"은 10bit, "6"은 4bit 바이너리 데이터로 인코딩한다.
이것의 결과는 "1111011011 0110"이 된다.

알파벳+α 모드에서는, 표2에 의해 모든 문자가 특정한 숫자로 바뀐다.
그 다음 모든 숫자들을 2개씩 나눈다. 2개 중 첫 번째 값에 45를 곱하고 두 번째 값을 더한 결과를 11bit 바이너리 데이터로 인코딩하면 된다. 만약 나뉜 숫자가 1개라면 6bit 바이너리 데이터로 인코딩해야 한다.

예제 데이터는 다음과 같이 인코딩된다.

"AB" "CD" "E1" "23"
= 45*10 + 11 = 45*12 + 13 = 45*14 + 1 = 45*2 + 3
= 461 = 553 = 631 = 93
0010 000001000 00111001101 01000101001 01001110111 00001011101

8bit 모드에서는, 각 값이 그대로 바이너리 데이터로 쓰인다.

2.2.4 종료 지시자

2.2.3에서 나온 결과에 0000을 추가한다. 만약 2.2.3에서 이미 데이터 코드의 길이가 최대에 도달했다면 이 작업은 할 필요가 없다.

0010 000001000 00111001101 01000101001 01001110111 00001011101 0000

2.2.5 데이터 코드로 인코딩

2.2.4에서 나온 결과를 8bit 단위로 나눈다.

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000

만약 마지막 8bit가 모두 차지 않았다면 남은 bit를 모두 0으로 채운다.

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000

만약 데이터 코드가 표1의 최대 개수만큼 차지 못했다면 "11101100"과 "00010001"을 번갈아 가면서 최대 개수까지 추가해준다.

1-H에서 데이터의 최대 개수는 9이므로 한 개의 8bit 블럭만 채우면 된다.

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000 11101100

10진수로 변환해보면 다음과 같다.

32 65 205 69 41 220 46 128 236



이전 페이지   다음 페이지