데이터 매트릭스

섬네일| "Wikipedia, the free encyclopedia"라는 텍스트를 인코딩한 데이터 매트릭스의 예
**데이터 매트릭스**(Data Matrix)는 정사각형이나 직사각형 패턴으로 배열된 흑백 "셀" 또는 점으로 구성된 2차원 코드이다. 인코딩되는 정보는 텍스트 데이터나 숫자 데이터일 수 있다. 일반적인 데이터 크기는 몇 바이트에서 최대 1556 바이트까지이다. 인코딩된 데이터의 길이는 행렬의 셀 수에 따라 달라진다. 한 개 또는 두 개의 셀이 손상을 입어 데이터를 읽을 수 없다고 하더라도 이를 대비하여 오류 정정 코드가 종종 이용된다. 데이터 매트릭스 기호는 최대 2,335개의 영숫자 문자를 저장할 수 있다.

데이터 매트릭스는 직사각형이며, 비트를 나타내는 정사각형 "셀"로 구성된다. 사용된 코딩에 따라, "밝은" 셀은 0을 나타내고, "어두운" 셀은 1을 나타내거나 그 반대일 수도 있다. 모든 데이터 매트릭스는 "L"자 모양의 두 개의 인접한 단색 테두리("파인더 패턴"이라고 함)와 어둡고 밝은 "셀" 또는 모듈이 번갈아 가며 구성된 두 개의 다른 테두리("타이밍 패턴"이라고 함)로 구성된다. 파인더 패턴은 기호의 위치를 파악하고 방향을 정하는 데 사용되고, 타이밍 패턴은 기호의 행과 열의 개수를 계산한다. 코드에 더 많은 데이터가 인코딩될수록 셀(행과 열)의 수가 늘어난다.새로운 버전 ECC 200에서는 코드의 크기가 10×10에서 144×144까지이며, 기존 버전 ECC 000~140에서는 9×9에서 49×49까지이다.

다이소에서 사용하는 2차원 바코드는 QR코드가 아니라 데이터 매트릭스이다.

## 응용
[섬네일|[미니 PCI 카드에 표시된 데이터 매트릭스. 시리얼 번호 15C06E115AZC72983004를 인코딩하고 있다.]]
데이터 매트릭스의 가장 대중적인 용도는 작은 물품의 마킹이다. 이는  크기에서도 판독 가능한 심볼에 50개의 문자를 인코딩할 수 있는 능력과, 단 20%의 대비율만으로도 코드를 읽을 수 있다는 점 때문이다.
데이터 매트릭스는 크기 조절이 가능하다. 상업적 응용 사례로는  크기의 이미지( 실리콘 장치에 레이저로 식각됨)부터 유개화차 지붕에 그려진 1미터(3피트) 정사각형 크기까지 존재한다. 마킹 및 판독 시스템의 정밀도만이 유일한 제한 사항이다.
미국 전자 산업 협회(EIA)는 작은 전자 부품의 라벨링에 데이터 매트릭스를 사용할 것을 권장한다.

데이터 매트릭스 코드는 라벨이나 편지와 같은 인쇄 매체에서 흔히 볼 수 있게 되었다. 이 코드는 바코드 판독기를 통해 빠르게 읽을 수 있어, 예를 들어 소포가 수취인에게 발송되었을 때 매체를 추적할 수 있게 해준다.

섬네일|left|표면 마킹
산업 공학적 목적으로 데이터 매트릭스 코드는 부품에 직접 마킹될 수 있으며, 이를 통해 의도한 부품만이 데이터 매트릭스로 인코딩된 정보로 식별되도록 보장한다. 코드는 다양한 방법으로 부품에 마킹될 수 있지만, 항공우주 산업에서는 주로 산업용 잉크젯, 도트 피닝(dot-peen) 마킹, 레이저 마킹, 전해 화학 식각(ECE) 등이 사용된다. 이러한 방법들은 부품의 수명만큼 지속될 수 있는 영구적인 마크를 제공한다.

부품에 마킹이 완료되면, 생산 라인을 따라 배치된 판독 카메라와 생산 완료 후 기술자가 사용하는 카메라를 통해 데이터 매트릭스를 디코딩하고 관련 정보를 읽을 수 있다. 여기에는 제조 날짜, 시리얼 번호 및 제조업체가 포함하기로 선택한 기타 관련 정보가 포함될 수 있다. 이러한 판독 카메라는 생산 라인을 통과하는 부품의 이동을 추적하고 재고 조사를 수행하는 데에도 사용될 수 있다.

[섬네일|휴대전화로 데이터 매트릭스 코드를 읽는 모습(위키백과의 이전 [위키백과:Semapedia|Semacode 프로젝트)]]
데이터 매트릭스 코드는 1D 바코드와 같은 다른 오픈 소스 코드와 함께 특정 모바일 애플리케이션을 다운로드하여 휴대전화로도 읽을 수 있다. 많은 모바일 장치가 데이터 매트릭스 코드를 포함한 2D 코드를 읽을 수 있지만, 모바일 접속 및 상호작용이 가능하도록 디코딩 기능을 확장한 사례는 소수이다. 이 경우 코드는 추적 및 추적(track and trace), 위조 방지, 전자 정부 및 뱅킹 솔루션 등 매체 전반에서 안전하게 사용될 수 있다.

### 식품 산업
데이터 매트릭스 코드는 식품산업의 자동 코딩 시스템에서 식품이 잘못 포장되거나 날짜가 잘못 표기되는 것을 방지하기 위해 사용된다. 코드는 식품 제조업체의 데이터베이스 내에서 내부적으로 관리되며 성분 차이와 같은 각 고유 제품과 연결된다. 각 제품 생산 시 고유 코드가 프린터에 제공된다. 2D 데이터 매트릭스가 최적의 스캔 위치에 배치될 수 있도록 라벨 아트워크가 필요하다. 흰색 배경에 검은색 코드의 경우 인쇄 품질에 문제가 없는 한 테스트가 필요하지 않지만, 모든 색상 변형은 판독 가능성을 보장하기 위해 생산 전에 테스트를 거쳐야 한다.

### 예술
2006년 5월, 독일의 컴퓨터 프로그래머인 베른트 호펜게르트너(Bernd Hopfengärtner)는 밀밭에 거대한 데이터 매트릭스를 만들었다(미스터리 서클과 유사한 방식). 메시지 내용은 "Hello, World!"였다.

## 기술 사양
섬네일|데이터 매트릭스 코드의 예시. "Wikipedia"라는 텍스트를 인코딩하고 있다. 색상별 의미: 데이터(녹색), 패딩(노란색), 오류 정정(빨간색), 파인더 및 타이밍(마젠타), 미사용(주황색).
데이터 매트릭스 심볼은 주변 파인더와 타이밍 패턴 내에 배열된 모듈로 구성된다. 전체 ASCII 문자 세트에서 최대 3,116자까지 인코딩할 수 있다. 심볼은 규칙적인 배열로 배치된 모듈을 포함하는 데이터 영역으로 구성된다. 큰 심볼은 여러 영역을 포함한다. 각 데이터 영역은 파인더 패턴에 의해 경계가 정해지며, 이는 사방이 콰이어트 존(여백) 경계로 둘러싸여 있다. (참고: 모듈은 원형이거나 사각형일 수 있으며 표준에서 특정 모양을 정의하지는 않는다. 예를 들어 도트 피닝 셀은 일반적으로 원형이다.)

### 데이터 매트릭스 ECC 200
데이터 매트릭스의 최신 버전인 ECC 200은 오류 및 소실 복구를 위해 리드 솔로몬 부호를 사용한다. ECC 200은 매트릭스의 위치를 정확히 찾을 수 있다는 가정하에 심볼이 30% 손상되어도 전체 인코딩된 데이터 문자열을 일상적으로 재구성할 수 있게 해준다. 데이터 매트릭스의 오류율은 스캔된 1,000만 문자당 1개 미만이다.

심볼은 짝수 행과 짝수 열로 구성된다. 대부분의 심볼은 10 × 10에서 144 × 144 사이의 크기를 가진 정사각형이다. 그러나 일부 심볼은 8 × 18에서 16 × 48 사이의 크기(짝수 값만 해당)를 가진 직사각형이다. ECC 200 오류 정정을 사용하는 모든 심볼은 오른쪽 상단 모서리 모듈이 배경색(이진수 0)과 동일하다는 점으로 식별할 수 있다.

이전 표준과 ECC 200 심볼을 구별하는 추가 기능은 다음과 같다:
* 역상 판독 심볼(어두운 배경에 밝은 이미지)
* 문자 세트의 지정(Extended Channel Interpretations를 통해)
* 직사각형 심볼
* 구조적 연결(더 많은 양의 데이터를 인코딩하기 위해 최대 16개의 심볼을 연결)

### 데이터 매트릭스 ECC 000–140
데이터 매트릭스의 구버전에는 ECC 000, ECC 050, ECC 080, ECC 100, ECC 140이 포함된다. ECC 200처럼 리드 솔로몬 부호를 사용하는 대신, ECC 000–140은 컨볼루션 기반의 오류 정정을 사용한다. 각각 제공하는 오류 정정량이 다르며, ECC 000은 제공하지 않고 ECC 140이 가장 높다. 디코딩 시 오류 검출을 위해 ECC 000의 경우에도 각 버전은 비트 패턴에 순환 중복 검사(CRC)를 인코딩한다. 추가 조치로 코드 내 각 비트의 배치는 사양에 포함된 비트 배치 표에 의해 결정된다. 이러한 구버전은 항상 홀수 개의 모듈을 가지며 9 × 9에서 49 × 49 사이의 크기로 제작될 수 있다. ECC 000에서 140까지의 오류 정정을 사용하는 모든 심볼은 오른쪽 상단 모서리 모듈이 배경색의 반대(이진수 1)라는 점으로 식별할 수 있다.

ISO/IEC 16022에 따르면, "ECC 000–140은 단일 당사자가 심볼의 생산과 판독을 모두 제어하고 전체 시스템 성능에 책임을 지는 폐쇄형 응용 프로그램에서만 사용해야 한다."

### 표준
데이터 매트릭스는 International Data Matrix, Inc. (ID Matrix)에 의해 발명되었으며, 이 회사는 RVSI/Acuity CiMatrix에 합병되었다. 이후 2005년 10월 지멘스 AG, 2008년 9월 마이크로스캔 시스템즈(Microscan Systems), 2017년 옴론(Omron)에 의해 인수되었다. 데이터 매트릭스는 오늘날 여러 국제 표준화 기구(ISO)/국제전기기술위원회(IEC) 표준에 의해 규정되어 있으며 많은 응용 분야에서 퍼블릭 도메인으로 공개되어 있어 라이선스나 로열티 없이 무료로 사용할 수 있다.

* ISO/IEC 16022:2024—Data Matrix bar code symbology specification
* ISO/IEC 15415—2-D Print quality standard
* ISO/IEC 15418:2016—Symbol data format semantics (GS1 응용 식별자 및 ASC MH10 데이터 식별자 및 유지관리)
* ISO/IEC 15424:2008—Data Carrier Identifiers (Symbology Identifiers 포함) [서로 다른 바코드 유형을 구별하기 위한 ID]
* ISO/IEC 15434:2006—Syntax for high-capacity ADC media (스캐너에서 소프트웨어로 전송되는 데이터 형식 등)
* ISO/IEC 15459—Unique identifiers

### 오류 정정
데이터 매트릭스 코드는 유한체 \mathbb{F}_{256} (또는 ) 상에서 리드 솔로몬 부호를 사용한다. 이 체의 원소들은 8비트 바이트로 인코딩된다. 표준 수치 \textstyle\sum_{i=0}^7 b_i 2^i를 갖는 바이트 b_7b_6b_5b_4b_3b_2b_1b_0는 \alpha^8 + \alpha^5 + \alpha^3 + \alpha^2 + 1 = 0을 만족하는 원시 원소  \alpha \in \mathbb{F}_{256}를 통해 체 원소 \textstyle\sum_{i=0}^7 b_i \alpha^i를 인코딩한다. 원시 다항식은 x^8 + x^5 + x^3 + x^2 + 1 이며, 이는 다항식 번호 301에 해당하고 생성 다항식을 얻기 위한 초기 루트는 1이다. 리드 솔로몬 부호는 코드가 추가하는 오류 정정 바이트 수에 따라 \mathbb{F}_{256} 상에서 서로 다른 생성 다항식을 사용한다. 추가되는 바이트 수는 생성 다항식의 차수와 같다.

예를 들어, 10&nbsp;×&nbsp;10 심볼에는 3개의 데이터 바이트와 5개의 오류 정정 바이트가 있다. 생성 다항식은 다음과 같이 얻어진다: g(x)=(x+\alpha)(x+\alpha^2)(x+\alpha^3)(x+\alpha^4)(x+\alpha^5),

결과는 다음과 같다:
g(x)=x^5+\alpha^{235}x^4+\alpha^{207}x^3+\alpha^{210}x^2+\alpha^{244}x+\alpha^{15},

또는 십진수 계수로 표현하면 다음과 같다:
g(x)=x^5 +62x^4 + 111x^3 +15x^2 + 48x + 228.

### 인코딩
섬네일|산업용 데이터 매트릭스 코드 판독기

인코딩 과정은 ISO/IEC 표준 16022:2006에 설명되어 있다. 데이터 매트릭스의 ECC-200 변형을 인코딩하고 디코딩하기 위한 오픈 소스 소프트웨어가 공개되어 있다.

아래 도표는 데이터 매트릭스 심볼 내의 메시지 데이터 배치를 보여준다. 메시지는 "Wikipedia"이며, 왼쪽 상단 모서리 근처에서 시작하는 다소 복잡한 대각선 패턴으로 배열된다. 첫 글자 W와 같이 일부 문자는 두 조각으로 나뉘며, "Wikipedia"의 세 번째 'i'는 일반적인 L자형 배열 대신 "코너 패턴 2"에 위치한다. 또한 메시지 종료 코드(End로 표시), 패딩(P) 및 오류 정정(E) 바이트, 그리고 4개의 미사용 공간 모듈(X)도 표시되어 있다.

심볼의 크기는 16×16(데이터 영역 14×14)이며, 12개의 데이터 바이트('End' 및 패딩 포함)와 12개의 오류 정정 바이트가 있다. (24,12,6)으로 단축된 (255,243,6) 리드 솔로몬 부호가 사용된다. 이는 최대 6바이트의 오류 또는 소실을 정정할 수 있다.

오류 정정 바이트를 얻기 위해 다음 절차를 수행할 수 있다:

(24,12,6) 부호에 지정된 생성 다항식은 다음과 같다:
g(x)=x^{12} + 242x^{11} + 100x^{10} + 178x^9 + 97x^8 + 213x^7 + 142x^6 + 42x^5 + 61x^4 + 91x^3 + 158x^2 +153x + 41,
이는 십진수 계수의 행렬 형태로도 쓸 수 있다:
 **[1 242 100 178 97 213 142 42 61 91 158 153 41]**

'End', P1, P2를 포함한 12바이트 길이의 메시지 "Wikipedia"를 십진수 계수로 나타내면 다음과 같다(ASCII 값을 사용한 계산 방법은 아래 도표 참조):
 **[<span style="color:light-dark(blue, lightblue)">88 106 108 106 113 102 101 106 98 129 251 147</span>]**

리드 솔로몬 체계적 인코딩 절차를 사용하여 다항식 나눗셈의 나머지 형태로 얻은 12개의 오류 정정 바이트(십진수 E1~E12)는 다음과 같다:
 **[<span style="color:light-dark(red, lightcoral)">104 216 88 39 233 202 71 217 26 92 25 232</span>]**
이 오류 정정 바이트들은 원래 메시지 뒤에 추가된다. 결과적인 코드 메시지는 24바이트이며 다음과 같은 형태를 갖는다:
 **[<span style="color:light-dark(blue, lightblue)">W i k i p e d i a 'End' P1 P2</span> <span style="color:light-dark(red, lightcoral)">E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12</span>]**
또는 십진수 계수로:
 **[<span style="color:light-dark(blue, lightblue)">88 106 108 106 113 102 101 106 98 129 251 147</span> <span style="color:light-dark(red, lightcoral)">104 216 88 39 233 202 71 217 26 92 25 232</span>]**
그리고 16진수 계수로:
 **[<span style="color:light-dark(blue, lightblue)">58 6A 6C 6A 71 66 65 6A 62 81 FB 93</span> <span style="color:light-dark(red, lightcoral)">68 D8 58 27 E9 CA 47 D9 1A 5C 19 E8</span>]**

다양한 종류의 메시지를 저장하기 위해 여러 인코딩 모드가 사용된다. 기본 모드는 8비트 코드워드당 하나의 ASCII 문자를 저장한다. 아래와 같이 모드 간 전환을 위해 제어 코드가 제공된다.

### 텍스트 모드
C40, Text 및 X12 모드는 텍스트 메시지를 저장하는 데 잠재적으로 더 조밀하다. 이들은 DEC Radix-50과 유사하게 0~39 범위의 문자 코드를 사용하며, 이 중 세 개의 코드를 결합하여 403=64,000까지의 숫자를 만들고, 이를 다음과 같이 두 바이트(최대값 65,536)로 패킹한다:

:V = C1×1600 + C2×40 + C3 + 1
:B1 = floor(V/256)
:B2 = V mod 256

결과적인 B1 값은 0~250 범위에 있다. 특수값 254는 ASCII 인코딩 모드로 돌아가는 데 사용된다.

문자 코드 해석은 아래 표와 같다. C40과 Text 모드에는 네 개의 별도 세트가 있다. 세트 0이 기본값이며, 다음 문자를 위해 일시적으로 다른 세트를 선택하는 코드를 포함한다. 유일한 차이점은 대문자와 소문자를 반전시킨다는 것이다. C40은 주로 대문자 중심이며 세트 3에 소문자가 있고, Text는 그 반대이다. ASCII 제어 코드를 포함하는 세트 1과 구두점 기호를 포함하는 세트 2는 C40과 Text 모드에서 동일하다.

### EDIFACT 모드

EDIFACT 모드는 문자당 6비트를 사용하며, 4개의 문자가 3바이트로 패킹된다. 숫자, 대문자 및 많은 구두점을 저장할 수 있지만 소문자는 지원하지 않는다.

### Base 256 모드

Base 256 모드 데이터는 길이 표시기로 시작하며, 그 뒤에 데이터 바이트 수가 이어진다. 1~249의 길이는 단일 바이트로 인코딩되고, 그 이상의 길이는 두 바이트로 저장된다.

:L1 = floor(길이 / 250) + 249, L2 = 길이 mod 250

인코딩된 메시지에서 0이 길게 이어지는 것을 피하는 것이 바람직한데, 이는 데이터 매트릭스 심볼에서 큰 공백 영역이 되어 스캐너의 동기화 유실을 초래할 수 있기 때문이다. (기본 ASCII 인코딩은 이러한 이유로 0을 사용하지 않는다.) 이를 방지하기 위해 길이와 데이터 바이트는 바이트 스트림의 위치 n에 따른 의사 난수 R(n)을 더하여 가려진다.

:R(n) = (149 × n) mod 255 + 1

## 특허 문제
2007년 11월 미국 특허 5,612,524가 만료되기 전, 지적 재산권 회사인 아카시아 테크놀로지스(Acacia Technologies)는 데이터 매트릭스가 자사 특허 내용에 부분적으로 포함된다고 주장했다. 아카시아는 특허권자로서 데이터 매트릭스 사용자들에게 연락하여 특허 관련 라이선스 비용을 요구한 것으로 알려졌다.

2D 바코드 장치의 대형 제조업체인 코그넥스 코퍼레이션(Cognex Corporation)은 아카시아가 고객들에게 라이선스 비용을 요구했다는 정보를 접한 후 2006년 3월 13일 선언적 판결 소송을 제기했다. 2008년 5월 19일, 미네소타주 미국 지방 법원의 조안 N. 에릭슨(Joan N. Ericksen) 판사는 코그넥스의 손을 들어주었다. 판결문에 따르면 2D 심볼 코드를 캡처하고 판독하는 시스템을 다루는 '524 특허는 피고들이 특허를 취득하는 과정에서 저지른 불공정 행위로 인해 무효이며 집행 불가능하다.

이 판결은 특허가 만료된 후에 내려졌지만, 2007년 11월 이전의 데이터 매트릭스 사용에 근거한 침해 주장을 사전에 차단했다.

독일 특허 출원 DE 4107020이 1991년에 제출되어 1992년에 공개되었다. 이 특허는 위의 미국 특허 출원에서 인용되지 않았으며 해당 특허들을 무효화할 가능성이 있다.

## 같이 보기
* PDF417
* 대용량 컬러 바코드
## 각주


분류:바코드