본문 바로가기

컴퓨터/기타

도서 바코드 인식기 프로그램 제작 (1)

반응형

대부분의 책에서 뒤쪽 표지를 보면 바코드가 붙어있는 것을 확인할 수 있다. 그리고 이 붙어있는 바코드를 바코드 리더기로 읽게 되면 자동으로 어떤 책인지에 대한 정보를 볼 수 있다.


바코드를 크게 나누면 1차원 바코드와 2차원 바코드로 나눌 수 있다. 도서에 사용되는 바코드의 경우에는 1차원 바코드에 해당하며, 2차원 바코드의 경우 우리가 잘 알고 있는 QR Code가 대표적인 예이다. 이 글의 목표는 도서 바코드 인식기를 만드는 것이기 때문에 2차원 바코드가 아닌 1차원 바코드에 대해서 다루도록 하겠다.


"2차원 바코드에 대해서 다루는 것이 아니다...."

"아래와 같은 1차원 바코드에 대해 다루는 것이다!!"



도서에 사용되는 1차원 바코드는 EAN-13 바코드(국제 상품 번호, International Article Number)에 해당한다. 그리고 이 13자리로 표현되는 값은 크게 4부분의 요소로 나뉜다.

첫 3자리의 경우는 그 물건이 제작된 나라를 의미한다. 그리고 다음 부분은 그 물건을 만든 회사 번호, 물건 참조 번호, 마지막으로 검사기호로 구성되어 있다. 여기서 말하는 검사 기호는 우리가 흔히 알고 있는 주민등록번호에서 맨 마지막 자리와 같이 그 값이 유효한 값인지 여부를 체크하기 위해서 사용하는 숫자를 의미한다.


그리고 여기서 첫 3자리가 물건이 제작된 나라를 의미한다고 하였는데, 도서의 경우에는 978과 979의 값을 가지고 있다. 그래서 '책나라(Bookland)'라는 용어를 사용하기도 한다.


그래서 이제 EAN-13 바코드의 내용에 대해서 살펴보도록 하자. 1차원 바코드이고, 기본적으로 인식을 할 때 '0'과 '1'의 형태로 인식을 한다. 그렇기 때문에 바코드의 값을 단순히 표현한다면 '0'과 '1'의 의미없는 나열로만 볼 수도 있을 것이다. 그래서 이 나열을 우리가 원하는 형태로 변환하는 과정이 필요하다. 이에 대한 내용은 Wikipedia에서 가져왔다.


13자리로 구성되어 있기 때문에 1번째 자리, 2~7번째 자리, 8~13번째 자리로 3그룹으로 먼저 나눈다. 그리고 1번째 자리의 값에 따라서 이후에 변환하는 방법이 달라진다.


Structure of EAN-13
First digit First group of 6 digits Last group of 6 digits
0 LLLLLL RRRRRR
1 LLGLGG RRRRRR
2 LLGGLG RRRRRR
3 LLGGGL RRRRRR
4 LGLLGG RRRRRR
5 LGGLLG RRRRRR
6 LGGGLL RRRRRR
7 LGLGLG RRRRRR
8 LGLGGL RRRRRR
9 LGGLGL RRRRRR


즉 디코딩 방법이 L방식, G방식, R방식과 같이 3가지 방식으로 이루어져있다.


Encoding of the digits
Digit L-code G-code R-code
0 0001101 0100111 1110010
1 0011001 0110011 1100110
2 0010011 0011011 1101100
3 0111101 0100001 1000010
4 0100011 0011101 1011100
5 0110001 0111001 1001110
6 0101111 0000101 1010000
7 0111011 0010001 1000100
8 0110111 0001001 1001000
9 0001011 0010111 1110100


여기에서 L, G, R의 관계를 살펴보면 L-code에 not을 취하면 R-code가 되고, G-code는 R-code를 거울상으로 뒤집은 것을 의미한다.

무슨 이유로 이렇게 나누었는지는 이해할 수가 없지만, 그래도 이것을 표준으로 해서 만들었기 때문에 이것을 지키면서 디코딩 과정을 거쳐야 한다.


그래서 이러한 디코딩 과정을 거치게 되면 얻어지는 결과는 바로 도서의 ISBN 코드이다. 이 ISBN 코드의 경우에는 도서에 대한 고유한 번호라고도 할 수 있기 때문에 도서의 ID라고 생각해도 무방하다. 그래서 도서관이나 서점에서는 ISBN 코드를 Key로 하여 데이터베이스를 구성하면 바로 도서에 대한 정보를 얻을 수 있다는 것을 의미한다.


이렇게 바코드를 디코딩하는 방법에 대해서 알아보았으니 다음 포스팅에서는 이 바코드의 바이너리 데이터를 우리가 원하는 데이터로 바꾸는 변환 과정에 대해 살펴보도록 하겠다.



반응형