PDF417
1. 개요
PDF417은 상업 기관과 정부 기관에서 널리 사용되는 2차원 바코드 형식이다. 미국 우정청에서 우표 인쇄에 사용되며, 항공 업계의 종이 탑승권, 미국 운전면허증 및 신분증, 이스라엘 비자 및 국경 통과 카드에도 적용된다. PDF417은 연결, 사용자 지정 치수, 퍼블릭 도메인 형식, 오류 정정 기능을 갖추고 있다. 바코드는 3~90개의 행으로 구성되며, 각 행은 여백, 시작 패턴, 행 정보, 데이터 코드워드, 정지 패턴 등으로 구성된다. PDF417은 929진법 인코딩을 사용하여 세 가지 주요 인코딩 모드(바이트, 숫자, 텍스트)를 지원한다. 다른 2D 바코드에 비해 저장 용량 대비 공간 효율성이 낮다.
| 유형 | 바코드 |
|---|---|
| 종류 | 스택식 |
| 발명가 | 이인지운 P. 왕 |
| 특허 | 미국 특허 제5243655호 |
2. 응용
PDF417은 상업 기관과 정부 기관 등 다양한 분야에서 사용되고 있다. PDF417은 미국 우정청에서 허용하는 우편 요금을 인쇄하는 데 사용할 수 있는 형식(데이터 매트릭스와 함께) 중 하나이며, 항공 업계의 BCBP(바코드 탑승권) 표준에서 종이 탑승권의 2D 바코드 상징으로도 사용된다.
2.1. 미국
PDF417은 미국 우정청에서 인정하는 우표를 인쇄하는 데 사용될 수 있는 형식 중 하나이다(데이터 매트릭스와 함께). PDF417은 또한 항공 산업의 바코드 탑승권(BCBP) 표준에서 종이 탑승권용 2D 바코드 기호로 사용된다. PDF417은 국토안보부에서 RealID를 준수하는 운전 면허증 및 주에서 발급하는 신분증에 대한 기계 판독 가능 구역 기술로 선택한 표준이다.
2.3. 대한민국 (잠재적 응용)
PDF417은 대한민국에서도 다양한 분야에서 활용될 수 있다.
전자정부 서비스: 주민등록증, 운전면허증 등 신분증에 PDF417을 적용하여 위변조 방지 및 정보 저장 용량을 확대할 수 있다. 공공기관에서는 문서 관리, 출입 통제 시스템 등에 활용할 수 있다.
물류 및 유통: 제품 정보, 배송 추적 등에 활용하여 효율성을 높일 수 있다.
금융: 전자 결제, 금융 정보 저장 등에 활용할 수 있다.
3. 특징
PDF417은 2차원 바코드의 일반적인 기능 외에도 다음과 같은 특징을 가진다.
* 연결. PDF417 심볼은 순차적으로 스캔되는 다른 심볼과 연결하여 더 많은 데이터를 저장할 수 있다.
* 사용자 지정 치수. 사용자는 PDF417 바코드에서 가장 좁은 수직 바(X 치수)의 너비와 행의 높이(Y 치수)를 결정할 수 있다.
* 퍼블릭 도메인 형식. 누구나 라이선스 없이 이 형식을 사용하여 시스템을 구현할 수 있다. ISO/IEC 문서에서는 이 심볼이 퍼블릭 도메인에 있으며 사용자 제한, 라이선스 및 수수료가 없음을 명시하고 있다.
* 오류 정정. PDF417 심볼이 생성될 때 2개에서 512개까지의 오류 감지 및 정정 코드 워드가 추가된다. PDF417은 리드-솔로몬 오류 정정을 사용한다.
3.3. 퍼블릭 도메인
누구나 라이선스 없이 이 형식을 사용하여 시스템을 구현할 수 있다.
ISO/IEC 문서의 서문은 다음과 같이 명시하고 있다.
: 바코드 장비 제조업체와 바코드 기술 사용자는 장비 및 응용 프로그램 표준을 개발할 때 참조할 수 있는 공개 표준 심볼 규격을 필요로 합니다. 이 국제 표준에 제시된 심볼은 완전히 퍼블릭 도메인에 있으며 모든 사용자 제한, 라이선스 및 수수료가 없다는 것이 ISO/IEC의 의도이자 이해입니다.
3.4. 오류 정정
PDF417 심볼이 생성될 때 2개에서 512개까지의 오류 감지 및 정정 코드 워드가 추가된다. PDF417은 리드-솔로몬 오류 정정을 사용한다. 심볼을 스캔할 때 최대 정정 횟수는 추가된 코드 워드의 수와 같지만, 표준에서는 정정된 정보의 신뢰성을 확보하기 위해 2개의 코드 워드를 남겨두는 것을 권장한다.
4. 형식
--
PDF417 바코드(심볼)는 3~90개의 행으로 구성되며, 각 행은 작은 선형 바코드와 같다. 각 행의 구성 요소는 다음과 같다.
* 여백: 바코드가 시작되기 전후에 필요한 최소한의 흰색 공간이다.
* 시작 패턴: PDF417 형식임을 식별한다.
* "행 왼쪽" 코드워드: 행 번호 및 오류 수정 수준 등 행에 대한 정보를 담고 있다.
* 1~30개의 데이터 코드워드: 하나 이상의 숫자, 문자 또는 기타 기호를 나타내는 막대와 공백 그룹이다.
* "행 오른쪽" 코드워드: 행에 대한 추가 정보를 담고 있다.
* 정지 패턴: 바코드의 끝을 나타낸다.
모든 행은 너비가 동일하며, 각 행은 동일한 수의 코드워드를 갖는다.
4.1. 구성 요소
--
PDF417 바코드 (또는 심볼)는 3개에서 90개 행으로 구성되며, 각 행은 작은 선형 바코드와 같다. 각 행의 구성 요소는 다음과 같다.
* 여백: 바코드가 시작되기 전에 필요한 최소한의 흰색 공간이다.
* 시작 패턴: PDF417 형식임을 식별한다.
* "행 왼쪽" 코드워드: 행 번호 및 오류 수정 수준 등 행에 대한 정보를 담고 있다.
* 1~30개의 데이터 코드워드: 하나 이상의 숫자, 문자 또는 기타 기호를 나타내는 막대와 공백 그룹이다.
* "행 오른쪽" 코드워드: 행에 대한 추가 정보가 있다.
* 정지 패턴.
* 또 다른 여백.
모든 행은 너비가 동일하며, 각 행은 동일한 수의 코드워드를 갖는다.
4.2. 코드워드
PDF417은 929진법 인코딩을 사용하며, 각 코드워드는 0부터 928까지의 숫자를 나타낸다.
코드워드는 어두운 영역(바)과 밝은 영역(공백)의 패턴으로 표현된다. 각 패턴은 4개의 바와 4개의 공백을 포함하며(이름에 있는 4의 의미), 전체 너비는 가장 좁은 수직 바 너비(X 치수)의 17배이다(이름에 있는 17의 의미). 각 패턴은 바로 시작하여 공백으로 끝난다. 행 높이는 최소 너비의 3배 이상이어야 한다.
각 코드워드를 나타내는 데 사용되는 세 가지 뚜렷한 바-공백 패턴이 있다. 이 패턴들은 클러스터라고 하는 세 그룹(0, 3, 6)으로 구성된다. 바-공백 패턴은 둘 이상의 클러스터에서 사용되지 않는다. 심볼의 행은 세 클러스터를 순환하며, 행 1은 클러스터 0, 행 2는 클러스터 3, 행 3은 클러스터 6, 행 4는 다시 클러스터 0의 패턴을 사용하는 방식이다.
어떤 클러스터인지 다음 방정식을 통해 결정할 수 있다.
:
여기서 K는 클러스터 번호이고 bi는 심볼 문자에서 i번째 검은색 바의 너비(X 단위)를 나타낸다.
또는,
:
여기서 Ei는 i번째 가장자리에서 다음 동일한 가장자리까지의 거리이다. 홀수 인덱스는 바의 앞쪽 가장자리에서 다음 바의 앞쪽 가장자리까지, 짝수 인덱스는 뒤쪽 가장자리를 나타낸다.
세 개의 클러스터의 한 가지 목적은 코드워드가 있는 행(mod 3)을 결정하는 것이다. 클러스터를 통해 수평에서 벗어날 수 있는 단일 스캔 라인을 사용하여 심볼의 일부를 읽을 수 있다. 예를 들어, 스캔은 행 6의 시작 부분에서 시작하여 행 10에서 끝날 수 있다. 스캔 시작 시, 스캐너는 일정한 시작 패턴을 보고 클러스터 6의 심볼을 본다. 기울어진 스캔이 행 6과 7에 걸쳐 있으면, 스캐너는 노이즈를 본다. 스캔이 행 7에 있으면 스캐너는 클러스터 0의 심볼을 본다. 결과적으로, 스캐너는 기울기의 방향을 안다. 스캐너가 오른쪽으로 도달할 때쯤에는 행 10에 있으므로 클러스터 0 패턴을 본다. 스캐너는 또한 일정한 정지 패턴을 보게 된다.
4.3. 인코딩
929개의 코드 워드 중 900개는 데이터에 사용되고 29개는 주요 모드 간 전환과 같은 특수 기능에 사용된다. 세 가지 주요 모드는 서로 다른 방식으로 다른 유형의 데이터를 인코딩하며, 단일 바코드 내에서 필요에 따라 혼합될 수 있다.
* 바이트: 5개의 코드 워드 각 그룹은 6바이트를 나타낸다. (9005 > 2566이기 때문.) 추가 바이트는 코드 워드당 하나씩 인코딩된다.
* 숫자: n개의 숫자는 최대 15개의 코드 워드로 최대 44개의 숫자까지 +1개의 코드 워드로 인코딩된다.
* 텍스트: 각 코드 워드는 두 개의 30진수 숫자를 나타내며, 4개의 하위 모드 시스템에서 사용된다. 이들은 인쇄 가능한 ASCII 문자(및 CR, LF 및 HT)를 나타내는 데 사용된다.
| 모드 | 설명 |
|---|---|
| 대문자 | A~Z, SP, 소문자로 변경, 혼합으로 변경, 다음 숫자를 구두점으로 해석 |
| 소문자 | a~z, SP, 다음 숫자를 대문자로 해석, 혼합으로 변경, 다음 숫자를 구두점으로 해석 |
| 혼합 | 0~9, &, CR, HT, 쉼표, :, #, -, 마침표, $, /, +, %, *, =, ^, 구두점으로 변경, SP, 소문자로 변경, 대문자로 변경, 다음 숫자를 구두점으로 해석 |
| 구두점 | , @, [, \, ], _, `, ~, !, CR, HT, 쉼표, :, LF, -, 마침표, $, /, ",>, *, (, ), ?, {, }, ', 대문자로 변경 |
5. 다른 2D 바코드와의 비교
PDF417은 스택형 바코드로, 간단한 선형 스캐너로 심볼을 스캔하여 읽을 수 있다. 선형 스캔을 위해서는 시작 및 중지 코드 단어가 있는 왼쪽 및 오른쪽 열이 필요하다. 스캔은 스캔 중인 행을 알아야 하므로, 심볼의 각 행은 해당 행 번호도 인코딩해야 한다. 리더의 라인 스캔은 한 행을 스캔하기 시작하지만 이웃 행으로 교차하여 연속적인 행을 교차하여 계속 진행할 수도 있다. 이러한 교차의 영향을 최소화하기 위해 PDF417 모듈은 높고 좁으며, 높이는 일반적으로 너비의 3배이다. 각 코드 단어는 어느 행에 속하는지 표시해야 하므로 교차가 발생할 때 감지할 수 있다. 코드 단어는 델타 디코딩 가능하도록 설계되어 일부 코드 단어가 중복된다. 각 PDF417 데이터 코드 단어는 약 10비트의 정보를 나타내지만(log2(900) ≈ 9.8), 인쇄된 코드 단어는 17개 모듈 너비이다. 3개 모듈 높이를 포함하여 PDF417 코드 단어는 10비트를 나타내기 위해 51개의 정사각형 모듈이 필요하다. 이 영역은 시작, 중지, 행, 형식 및 ECC 정보와 같은 다른 오버헤드는 계산하지 않는다.
DataMatrix 및 QR과 같은 다른 2D 코드는 조정되지 않은 선형 스캔 대신 이미지 센서로 디코딩된다. 이러한 코드는 여전히 인식 및 정렬 패턴이 필요하지만, 그만큼 눈에 띄지 않아도 된다. 8비트 코드 단어는 8개의 정사각형 모듈을 차지한다(인식, 정렬, 형식 및 ECC 정보는 무시).
실제로 PDF417 심볼은 DataMatrix 또는 QR 코드의 약 4배 면적을 차지한다.