사내 관리용 바코드를 새로 만든다면 Code 128을 선택합니다. 같은 번호를 더 좁게 인쇄하고, 검사 문자가 항상 들어가며, 영문 소문자까지 별도 설정 없이 담습니다.
기존 전산 시스템이나 거래처 규격이 Code 39로 정해져 있다면 그대로 유지합니다. 데이터가 대문자와 숫자뿐이고 라벨 폭에 여유가 있으면 운용에 문제가 없습니다.
Code 128·Code 39 구조 비교
| 항목 | Code 128 | Code 39 |
|---|---|---|
| 국제 표준 | ISO/IEC 15417 | ISO/IEC 16388 |
| 담는 문자 | ASCII 128자 전체(0~127) | 대문자·숫자와 특수문자 7개, 모두 43자 |
| 글자 1개의 구조 | 막대 3개·공백 3개, 11모듈 | 막대 5개·공백 4개, 그중 3개가 넓은 요소 |
| 막대·공백 폭 종류 | 1·2·3·4모듈 4종 | 좁음·넓음 2종(비율 2:1~3:1) |
| 숫자 압축 | 숫자 2자리를 1글자로(숫자당 5.5모듈) | 없음(글자당 13~16모듈) |
| 검사 문자 | Modulo 103, 항상 포함 | Modulo 43, 선택 |
| 좌우 여백 | 각 10X 이상 | 각 10X 이상 |
X는 가장 좁은 막대 하나의 폭입니다. 막대 폭을 4단계로 나누는 Code 128은 글자 1개를 11모듈 안에 담고, 시작·검사·정지 문자를 합친 고정 부분이 35모듈입니다.
반면 Code 39는 글자마다 넓은 요소 3개가 들어가고, 글자 사이에도 1X 이상의 공백 간격이 붙습니다. 글자 수가 같아도 폭이 넓어지는 이유입니다.
영문 소문자나 제어 문자는 +B처럼 두 글자를 묶는 Full ASCII 방식으로 넣습니다. 묶음을 소문자 b로 바꾸는 일은 스캐너 몫이라, 판독기 설정이 켜져 있어야 소문자로 입력됩니다.
같은 데이터의 바코드 폭 계산
203dpi 프린터의 점 2개, X 0.25mm로 계산한 좌우 여백 포함 폭입니다. Code 128은 (11N + 55) × X(N은 데이터 문자 수) 공식을, Code 39는 ISO/IEC 16388의 폭 공식에 글자 사이 간격 1X와 여백 각 10X를 넣었습니다.
| 바코드 데이터 | Code 128 | Code 39 (3:1) | Code 39 (2.5:1) |
|---|---|---|---|
| IT20260148 (영문 2 + 숫자 8) | 33.0mm | 52.75mm | 48.25mm |
| IT20260148 + 검사 문자 | 33.0mm | 56.75mm | 51.88mm |
| 202610300001 (숫자 12) | 30.25mm | 60.75mm | 55.5mm |
숫자 12자리에서는 폭이 2배 차이 납니다. 숫자 2자리를 1글자로 압축하면 12자리가 6글자가 되지만, 압축이 없는 쪽은 1자리가 그대로 1글자입니다. IT20260148처럼 영문이 앞에 붙어도 뒤쪽 숫자 8자리는 서브셋 전환 문자 1개를 더해 5글자로 줄어듭니다.
압축 여부는 프린터 명령에서도 달라집니다. 제브라 ZPL의 ^BC 명령에 시작 문자를 지정하지 않으면 서브셋 B로 인쇄되고, IT20260148은 숫자까지 1자리씩 10글자로 처리되어 41.25mm입니다.
^BC의 모드 항목을 A(자동)로 설정하면 숫자가 4자리 이상 이어지는 구간을 프린터가 숫자 서브셋으로 바꿔 33.0mm로 인쇄합니다.
Code 39를 유지하는 현장
미국 국방부를 비롯해 여러 산업이 오래 표준으로 운용해 온 코드입니다. 납품처가 라벨 규격에 지정했거나 사내 프로그램이 이 데이터 형식을 기준으로 개발되어 있으면, 바꾸지 않는 편이 안전합니다.
막대 폭이 좁음·넓음 2종뿐이라 판독 여유도 있습니다. 표준 판독 방식은 글자 1개의 막대 5개·공백 4개 전체 폭을 8로 나누고, 그보다 넓은 요소를 넓음으로 판정합니다. 제브라 DS2208의 5mil 막대 최대 판독 거리는 Code 39 15.2cm, Code 128 10.2cm입니다.
글자마다 떨어진 구조라 글자 사이 간격도 넓게 허용됩니다. X가 0.287mm보다 작으면 1X에서 5.3X까지입니다.
프린터·스캐너 설정 확인
ZPL에서는 ^BY 명령의 두 번째 항목이 넓은 막대 비율이고, 2.0~3.0 사이를 0.1 단위로 정하며 기본 설정은 3.0입니다. 점 단위로만 인쇄되므로 X를 점 1개로 설정하면 실제 비율은 2:1이나 3:1만 나옵니다. 비율이 고정된 Code 128에는 이 항목이 적용되지 않습니다.
Code 39 검사 문자는 ^B3 명령의 두 번째 항목에서 켜며, 기본 설정은 꺼짐(N)입니다. 넣었다면 스캐너의 검사 문자 확인도 켜야 효과가 있고, DS2208은 이 항목과 Full ASCII 2개가 모두 꺼진 상태로 출고됩니다.
Modulo 103 검사 문자는 ZPL에서 켜고 끄는 항목이 없고 항상 인쇄됩니다. ^BC의 다섯 번째 항목(e)은 GS1 물류용 검사 숫자를 하나 더 붙이는 설정이라, 사내 번호에는 기본 설정 N을 유지합니다.
긴 번호는 스캐너의 길이 제한도 확인합니다. DS2208은 Code 39를 1~55자 범위로 읽도록 출고되며, 길이 설정 바코드로 0~80자 안에서 바꿉니다.
두 코드를 함께 운용하는 현장은 스캐너 심볼로지 설정에서 필요한 종류만 켜는 방법을 확인합니다. 물류 박스의 GS1-128은 응용식별자를 더한 별도 규격이고, GS1-128 물류 라벨 읽는 법에 정리했습니다.


