상기 기술적 과제를 해결하기 위한 본 발명에 의한 CRS-CODE는 바코드의 상단 또는 하단에 위치하여 기울어진 각도를 얻어내는 인식자; 개수를 통해 바코드의 크기를 계산하는데 사용하며 또한 바코드 리드의 축을 제대로 잡았는가를 확인하는데도 사용하는 타이밍 셀; 흑과 백의 사각형 점으로 구성되며 이를 통해 컴퓨터 신호로 바꾸는 데이터 영역; 및 데이터의 보호 및 경계의 구분을 위하여 비워두는 보호공백을 포함함을 특징으로 한다.
또한, 데이터 이외에 사용자가 지정한 이미지를 중앙부에 위치하는 사용자 이미지영역을 더 포함함을 특징으로 한다.
또한, 상기 인식자는 PCS(Primary Cutout Symbol)와 SCS(Secondary Cutout Symbol)와 하단 CS를 포함함을 특징으로 한다.
또한, 상기 PCS는 바코드의 좌측상단에, 상기 SCS는 우측상단에 위치함을 특징으로 한다.
또한, 상기 상부 CS는 어느 방향으로 읽어도 같은 비율을 가지며, 이때 정해진 비율을 나타내는 선은 CS의 중심을 통과하게 되므로 이를 이용하여 CS를 찾게되며, 상기 상부의 두 인식자의 중심점을 통해 sin, cos 값을 얻어내며 바코드의 기울어진 각도를 계산함을 특징으로 한다.
또한, 상기 하부 CS는 상기 상부 CS를 통해 그 위치를 유추한 후 가로 세로의 크기가 2인 점을 검사하여 찾게 되며, 4개의 인식자를 통해 바코드의 4 모서리 점의 중심좌표를 구한 후 이미지 프로세싱을 통해 각 데이터를 읽게 됨을 특징으로 한다.
상기 다른 기술적 과제를 해결하기 위한 본 발명에 의한 CRS-CODE 생성방법은 CRS-CODE외형에 맞게 그래픽 파일을 출력하여 2D 바코드를 생성하는 방법에 있어서, (a)데이터를 압축하고, 압축된 데이터를 이진화하는 단계; (b)상기 이진수로 변환된 데이터를 소정의 크기로 구획하는 단계; (c)상기 구획 단위로 이진 데이터를 에러보정 알고리즘을 통해 암호화된 2진수로 바꾸는 단계; (d)상기 이진 데이터의 위치를 재배치시키는 단계; 및 (e)CRS-CODE 외형에 맞추어 그래픽 파일을 출력하는 단계를 포함함을 특징으로 한다.
또한, 상기 (a)단계는 문자, 숫자 및 공백을 그 형태에 맞게 압축하는 CASE BY CASE방법을 이용하는 것을 특징으로 한다.
또한, 상기 문자압축은 실제 사용되지 않는 부분을 통해 8bit 스트림을 7bit 스트림으로 표현하고, 상기 비사용 영역 중 한글과 영문의 공통된 부분은 0과 1이므로, 상기 0과 1을 부호를 표시하는 헤더로 사용함을 특징으로 한다.
또한, 상기 숫자압축은 헤더 + 2code(H2C)를 사용하여, 헤더에 숫자의 자릿수를 표시하고 2개의 숫자를 묶어 하나의 코드화하는 것을 특징으로 한다.
또한, 상기 공백압축은 자기의 고유 자릿수를 가진 텍스트가 자리차지 후 공백이 일반 텍스트 문서에 비해 많이 생기게 되므로 반복횟수를 이용하여 압축하고, 공백 후에 영문 인식자 0이 나오면 반복횟수 헤더로 인식하여 그 뒤 한 캐릭터에 반복되는 횟수를 기록하는 것을 특징으로 한다.
상기 또 다른 기술적 과제를 해결하기 위한 본 발명에 의한 CRS-CODE 해석방법은 CRS-CODE외형에 맞게 그래픽 파일을 출력하여 생성한 2D 바코드를 해석하는방법에 있어서, (a)상기 바코드 리더기에 의해 인식된 CRS-CODE의 데이터영역에서 2진 데이터를 얻는 단계; (b)상기 2진 데이터의 위치를 재배치시키는 단계; (c)상기 재배치된 2진 데이터의 오류를 보정하는 단계; 및 (d)상기 오류가 보정된 2진 데이터의 압축을 해제하는 단계를 포함함을 특징으로 한다.
또한, 상기 (C)단계는 CRS-CODE의 데이터를 집단별로 리드 솔로몬 알고리즘을 적용하여 0%, 10%, 30%의 에러보정 옵션에 따라 코드의 훼손, 낙서, 오염, 등에 의한 오류를 허용범위 안에서 복원함을 특징으로 한다.
또한, 상기 리드 솔로몬 알고리즘은 상기 에러보정 옵션별로 2진 데이터를 소정량을 한 단위로 하여 소정 단위의 정보데이터를 검사 심볼로 만들어 사용하는 것을 특징으로 한다.
또한, 상기 검사심볼은 정보심볼을 유한체의 다항식 형태로 바꾼 후 생성다항식으로 나눗셈을 하여 생긴 나머지 다항식임을 특징으로 한다.
이하, 도면을 참조하여 본 발명을 상세히 설명하기로 한다.
도 2는 본 발명에 의한 CRS-CODE의 외형을 도시한 것으로, 인식자(Cutout Symbol:110), 타이밍 셀(Timing cell:120), 데이터 영역(Data Area:130), 보호공백(Protected Blank Area:140) 및 사용자 이미지영역(User Image Area:150)으로 이루어진다.
인식자(Cutout Symbol:110)는 바코드의 위치와 기울어진 각도를 얻어내기 위한 것으로, PCS(Primary Cutout Symbol)와 SCS(Secondary Cutout Symbol)와 하단 CS를 사용한다.
PCS는 바코드의 좌측상단에, SCS는 우측상단에 위치한다. 이때 인식자는 아래의 그림과 같이 두 개의 사각형을 사용하며 이때 음영의 비율은 다음과 같다.
상부의 CS는 어느 방향으로 읽어도 같은 비율을 가지게 되는데, 이때 정해진 비율을 나타내는 선은 CS의 중심을 통과하게 되므로 이를 이용하여 CS를 찾게된다. 두 인식자의 중심점을 통해 sin, cos 값을 얻어내며 바코드의 기울어진 각도를 계산할 수 있다.
하부의 인식자는 상부인식자를 통해 그 위치를 유추한 후 가로 세로의 크기가 2인 점을 검사하여 찾게 되며, 4개의 인식자를 통해 바코드의 4모서리 점의 중심좌표를 구한 후 이미지 프로세싱을 통해 각 데이터를 읽게 된다.
타이밍 셀(Timing Cell:120)은 개수를 통해 바코드의 크기를 계산하는데 사용하며 또한 바코드 리드의 축을 제대로 잡았는가를 확인하는데도 사용한다.
데이터 영역(Data Area:130)은 흑과 백의 사각형 점으로 구성되며 이를 통해 컴퓨터 신호로 바꾸게 된다.
보호공백(Protected Blank Area:140)은 데이터의 보호 및 경계의 구분을 위하여 비워두는 공백이다.
사용자 이미지영역(User Image Area:150)은 옵션사항으로 데이터 이외에 사용자가 지정한 이미지를 중앙부에 위치시켜 개별성을 줄 수 도 있다.
도 3a 내지 도 3c는 본 발명에 의한 CRS-CODE의 일실시예를 도시한 것이다.
여기서, 도 2a는 사용자 이미지영역 없이 만들어진 CRS-CODE를 나타낸 것이다. 도 2b와 도 2c는 중앙에 사용자 이미지를 사용한 경우로서, 반드시 흑백일 필요는 없으며 음영만 확실하면 된다.
도 4는 본 발명에 의한 CRS-CODE의 생성방법을 도시한 순서도이다.
먼저, 데이터를 압축하고(S410), 압축된 데이터를 이진화하고(S420), 이진수를 일정크기로 구획하고(S430), 상기 구획 단위로 이진 데이터를 에러보정 알고리즘을 적용하여(S440) 암호화된 2진수로 변환하고(S450), 상기 변환된 이진 데이터의 위치를 재배치시킨다(S460).
그리고, 재배열 알고리즘을 통해 암호화된 2진수를 적당히 섞어 CRS-CODE 외형에 맞게 이미지화 시켜(S470), 이를 CRS-CODE의 형식(outform)에 맞추어 그래픽 파일을 만든다. 상기 그래픽 파일을 출력하면 2D바코드가 생성되는 것이다.
본 발명에서는 CRS-CODE의 경우 2D바코드의 특성을 고려하여 'Case by Case'법을 사용하고, 2D 바코드의 경우 그 데이터가 문자, 숫자, 공백으로 나눌 수 있으며 그 형태에 따라 압축하는 방법을 다르게 사용함으로써 데이터를 더욱 고밀도화 시킨다.
(1)문자압축
아스키코드는 0∼127이 쓰이며 한글의 경우 -1∼ -127이 사용되고 있다. 따라서 8bit로 한글과 영문을 모두 표현할 수 있다.
이때 실제로 사용되지 않는 부분은 존재하며 이를 통해 8bit 스트림을 7bit 스트림으로 표현이 가능해진다.
아스키코드의 범위 및 실제 사용범위는 다음 표 1에 나타낸 것과 같다.
|
범위 |
실제사용범위 |
영문 |
0 ~ 127 |
32 ~ 126 |
한글 |
-1 ~ -127 |
-2 ~ -127 |
비 사용 영역중 한글과 영문의 공통된 부분은 0과 1이다. 0과 1을 부호를 표시하는 헤더로 사용할 수 있다.
0을 양수(영문) 1을 음수(한글)의 헤더라고 할 때 그 실시예는 다음과 같이 표현된다.
예) 120,37,-33,-2,-9,92,78.....
0.120,37,1,33,2,9,0,92,78.....
여기서 아스키 코드넘버로만 보면 오히려 코드가 늘어나게 된다.
하지만 127은 2진수로 1111111(7bit)이므로 한 부호당 7byte 이상일 때는 도리어 적은 bit를 소모할 수 있다.
소요되는 비트의 예는 표 2와 같다.
Text |
Byte |
비압축시 |
압축시 |
소요bit |
소요Matrix |
소요bit |
소요Matrix |
1234 |
4 |
32 |
6*6 |
35 |
6*6 |
abcdefg |
7 |
56 |
8*8 |
56 |
8*8 |
대한민국 |
8 |
64 |
8*8 |
63 |
8*8 |
대한민국 KOREA |
14 |
112 |
11*11 |
112 |
11*11 |
코리아파이팅 KoreaFighting1234567890 |
37 |
296 |
18*18 |
273 |
17*17 |
단, 한글만 사용할 경우 스페이스는 영문(32)으로 처리되므로 (0 32 1)이라는 긴 코드가 들어가 도리어 압축율이 낮아진다.
이는 한글의 헤더 1을 이용하여 한글을 사용하던 중 다시 한글 헤더 1이 나오면 스페이스로 인식하게 하여 해결할 수 있다.
(2)수치압축
숫자의 경우 그것을 문자로 보느냐 숫자로 보느냐에 따라서 소요되는 비트가 달라지게 된다.
문자의 경우 한자리에 7비트가 소요되지만 7비트를 10진수로 표현하면 127이므로 7비트로 2자리를 모두 표현이 가능하다.
영문의 경우 0∼31까지의 아스키코드는 사용하지 않으며 0과 1은 부호의 예약어로 쓰이므로 2∼31을 수치로 표현하는 것에 사용할 수 있다.
본 발명에서는 H2C방식을 사용하였다. 즉, 헤더 + 2code(H2C)를 사용한다.
이는 헤더에 숫자의 자릿수를 표시하고 2개의 숫자를 묶어 하나의 코드화하는 방법으로 구현이 쉬우며 숫자가 많을수록 더 큰 효율을 가지며, 숫자를 많이 이용하는 바코드에 유리하다.
단, 그 효율성을 위해서 CRS-CODE에서는 4자리 이상의 숫자에 대해서 H2C를 이용한다.
캐릭터수에 따른 표현 가능한 수치를 나타내면 표 3과 같다.
캐릭터수(7bit) |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
수치(0~) |
99 |
9999 |
999999 |
99999999 |
9999999999 |
999999999999 |
99999999999999 |
그리고, 표 4는 수치 압축 비압축의 비교를 나타낸 것이고, 표 5는 압축과 비압축, 수치압축의 소모성 비교를 나타낸 것이다.
자리수 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
아스키캐릭터수 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
H2code |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
6 |
7 |
7 |
8 |
이득코드수 |
0 |
0 |
0 |
1 |
1 |
2 |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
이득비트수 |
0 |
0 |
0 |
7 |
7 |
14 |
14 |
21 |
21 |
28 |
28 |
35 |
35 |
Text |
비압축시소요 bit |
압축시소요 bit |
수치압축시소요 bit |
1234 |
32 |
35 |
28 |
%%MAG1120010611 001530880108 21100501 서순분 박진익 631029289912650745 15N300 1-029217140-8 박재정 631029289912603614012부산시 진구 가야2동 669-26 12/4 894-6784 11A03502301 05 100 3 311A03550581 100 3 311A03504021 05 100 3 311A03502301 05 100 3 311A03550581 100 3 311A03504021 05 100 3 311A03502301 05 100 3 311A03550581 100 3 311A03504021 05 100 3 311A03502301 05 100 3 311A03550581 100 3 311A03504021 05 100 3 311A03502301 05 100 3 311A03550581 100 3 311A03504021 05 100 3 311A03502301 05 100 3 3 |
5456 |
4879 |
4312 |
(3)공백압축
바코드에 들어가는 내용에는 일반적인 텍스트가 아닌 구획된, 즉 자기의 고유 자릿수를 가진 텍스트가 사용되게 된다.
따라서 자리차지 후 공백이 일반 텍스트 문서에 비해 많이 생기게 되므로 반복횟수를 통해 소요 비트수를 아낄 수 있다.
CRS-CODE에서는 공백 후에 영문 인식자 0이 나오면 반복횟수 헤더로 인식하여 그 뒤 한 캐릭터에 반복되는 횟수를 기록한다. 단, 반복횟수가 4이상일 때 사용한다.
예) 빈칸 10개(32 32 32 32 32 32 32 32 32 32) -> 32 0 10
이 공백압축을 통해 바코드의 크기가 작아짐은 물론 바코드 자체도 더 조밀해진다. 표 6은 공백이 많은 데이터를 공백 압축 전과 후를 비교한 것이다.
|
CRS-CODE |
크기 |
공백 압축 전 |
|
33*3 |
공백 압축 후 |
|
29*9 |
바코드 내용 |
장길수 2-306 019-867-3856 부산 15가 5846SM3 2002000004 |
도 5는 본 발명에 의한 CRS-CODE의 해석방법을 도시한 순서도이다.
이미지프로세싱을 통해 데이터영역에서 2진 데이터를 얻고(S510), 데이터 위치를 재배치시킨다(S520).
그리고, 리드 솔로몬 알고리즘을 적용하여 오류를 보정하고(S530), case by case법을 통해 압축을 해제하여(S540) 일반데이터로 복원하여 사용한다(S550).
본 발명에서 상기 오류보정을 위한 ECC Algorithm 이란 데이터에 발생하는 오류를 찾아내고 정정하는 알고리즘으로써, 2D바코드와 같이 단독의 데이터를 저장하고 있는 매체에 발생할 수 있는 데이터의 손실이나 오염 등에 의한 왜곡에 대해 보정해 주어야 할 필요가 있다.
도 6은 본 발명에 의한 CRS-CODE의 오류의 유형들을 도시한 것이다.
도 6과 같은 데이터 손실이나 오염들과 같은 오류유형들을 보정하기 위하여 리드 솔로몬 알고리즘을 이용하며 0%(비사용), 10%(RS75), 30%(RS159)의 3가지 옵션을 사용한다.
정보데이타 |
정보데이타 |
정보데이타 |
-> |
검사심볼 |
정보심볼 |
검사심볼 |
정보심볼 |
검사심볼 |
정보심볼 |
CRS-CODE는 옵션별로 2진 데이터를 일정량을 한 단위로 하여 일정 단위의 정보데이터를 리드 솔로몬 알고리즘에 적용시켜 검사 심볼을 만들어 사용한다.
옵션 |
10% |
30% |
적용코드 |
RS(7,5) |
RS(15,9) |
기본단위 |
3비트 |
4비트 |
정보단위 |
5개 |
9개 |
생성되는검사심볼 |
2개 |
6개 |
리드솔로몬알고리즘을 적용하기 위해서는 유한체 수학을 사용하여야 하는데, 10%, 30%옵션에 대한 유한체는 각각 GF(8), GF(16)을 사용한다.
이진데이터 한 단위는 유한체의 하나의 변수로 표 9, 표 10과 같이 사용된다. 여기서 표 9는 GF(8)의 원소, 표 10은 GF(16)의 원소를 나타낸다.
유한체변수
|
다항식표현
|
이진
데이터
|
0 |
0 |
000 |
1 |
1 |
001 |
alpha |
alpha |
010 |
alpha ^{ 2 } |
alpha ^{ 2 } |
100 |
alpha ^{ 3 } |
alpha +1 |
011 |
alpha ^{ 4 } |
alpha ^{ 2 } + alpha |
110 |
alpha ^{ 5 } |
alpha ^{ 2 } + alpha +1 |
111 |
alpha ^{ 6 } |
alpha ^{ 2 } +1 |
101 |
alpha ^{ 7 } |
1 |
|
유한체변수
|
다항식표현
|
이진
데이터
|
0 |
0 |
0000 |
1 |
1 |
0001 |
alpha |
alpha |
0010 |
alpha ^{ 2 } |
alpha ^{ 2 } |
0100 |
alpha ^{ 3 } |
alpha ^{ 3 } |
1000 |
alpha ^{ 4 } |
alpha +1 |
0011 |
alpha ^{ 5 } |
alpha ^{ 2 } + alpha |
0110 |
alpha ^{ 6 } |
alpha ^{ 3 } + alpha ^{ 2 } |
1100 |
alpha ^{ 7 } |
alpha ^{ 3 } + alpha +1 |
1011 |
alpha ^{ 8 } |
alpha ^{ 2 } +1 |
0101 |
alpha ^{ 9 } |
alpha ^{ 3 } + alpha |
1010 |
alpha ^{ 10 } |
alpha ^{ 2 } + alpha +1 |
0111 |
alpha ^{ 11 } |
alpha ^{ 3 } + alpha ^{ 2 } + alpha |
1110 |
alpha ^{ 12 } |
alpha ^{ 3 } + alpha ^{ 2 } + alpha +1 |
1111 |
alpha ^{ 13 } |
alpha ^{ 3 } + alpha ^{ 2 } +1 |
1101 |
alpha ^{ 14 } |
alpha ^{ 3 } +1 |
1001 |
alpha ^{ 15 } |
1 |
0001 |
정보심볼을 유한체의 다항식 형태로 바꾼 후 생성다항식으로 나눗셈을 하여 생긴 나머지 다항식이 검사심볼이 된다.
x^{ n-k` } m(x)`=`q(x)`g(x)`+`p(x)
여기서, m(x) : 정보다항식 g(x) : 생성다항식 (차수 n-k)
q(x) : 몫다항식 p(x) : 나머지 다항식 (차수 n-k 미만)
생성 다항식은 옵션에 따라 수학식 2, 3과 같다.
g(x)`=`(x- alpha )(x- alpha ^{ 2 } )`=`x^{ 2 } `+` alpha ^{ 4 } x`+`a^{ 3 } (10% ECC)
g(x)=(x+ alpha )(x+ alpha ^{ 2 } )(x+ alpha ^{ 3 } )(x+ alpha ^{ 4 } )(x+ alpha ^{ 5 } )(x+ alpha ^{ 6 } ) (30% ECC)
=x^{ 6 } + alpha ^{ 10 } x^{ 5 } + alpha ^{ 14 } x^{ 4 } + alpha ^{ 4 } x^{ 3 } + alpha ^{ 6 } x^{ 2 } + alpha ^{ 9 } x+ alpha ^{ 6 }
본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다.