Trên tem tài sản trong văn phòng, nhãn linh kiện ở xưởng hay thẻ vị trí trong kho, bạn sẽ gặp một dãy vạch đen trắng kèm chuỗi chữ in hoa và số. Nhiều khả năng đó là Code 39, một trong những ký hiệu mã vạch (barcode symbology) ra đời sớm và vẫn được dùng rộng rãi trong công nghiệp. Code 39 dễ tạo và hầu hết đầu đọc đều hỗ trợ, nhưng nó cũng có giới hạn riêng. Bài viết này giải thích Code 39 là gì, cách mã được cấu tạo, cách máy quét đọc dữ liệu và khi nào doanh nghiệp nên chọn loại mã này.
1. Code 39 là gì? Mã vạch Code 39 có những đặc điểm nào?

Code 39 (còn gọi là Code 3 of 9, USD-3) là một loại mã vạch 1D, tức mã vạch tuyến tính một chiều. Dữ liệu được biểu diễn theo chiều ngang bằng tổ hợp các vạch (bar, phần tối) và khoảng trắng (space, phần sáng) có độ rộng khác nhau. Mục đích chính của Code 39 là nhận dạng và theo dõi đối tượng như sản phẩm, tài sản, linh kiện hoặc hồ sơ. Ký hiệu này hiện được chuẩn hóa trong tiêu chuẩn ISO/IEC 16388.
Code 39 do David Allais và Ray Stevens (Intermec) phát triển năm 1974. Thiết kế ban đầu cho phép tạo 40 tổ hợp ký tự. Một tổ hợp được dành làm ký tự bắt đầu/kết thúc, còn lại 39 ký tự dữ liệu, và tên gọi “Code 39” bắt nguồn từ đó. Tên “3 of 9” thì xuất phát từ cấu trúc: mỗi ký tự gồm 9 phần tử, trong đó có 3 phần tử rộng.
Phiên bản cơ bản sau đó được bổ sung thêm 4 ký tự. Bộ ký tự hiện tại gồm 43 ký tự:
- Chữ in hoa A–Z
- Số 0–9
- 7 ký tự đặc biệt: – . dấu cách $ / + %
Ngoài ra còn có dấu *, chỉ dùng làm ký tự bắt đầu và kết thúc.
Nếu cần mã hóa chữ thường hoặc đủ 128 ký tự ASCII, bạn dùng Extended Code 39 (Full ASCII Code 39). Chế độ này ghép hai ký tự cơ bản để biểu diễn một ký tự mở rộng, ví dụ +A thể hiện chữ a. Cả máy in và đầu đọc phải bật cùng chế độ thì dữ liệu mới được hiểu đúng.
| Đặc điểm | Ý nghĩa | Tác động thực tế |
| Mã vạch 1D | Dữ liệu nằm trên một trục ngang | Đầu đọc laser, CCD và camera đều đọc được |
| Bộ 43 ký tự | Hỗ trợ chữ in hoa, số và 7 ký tự đặc biệt | Phù hợp mã tài sản, mã linh kiện dạng “TS-0215” |
| Độ dài thay đổi | Không cố định số ký tự | Linh hoạt nhưng mã càng dài thì càng rộng |
| Tự kiểm tra (self-checking) | Mỗi ký tự có cấu trúc 3 rộng/9 phần tử | Giảm nguy cơ đọc nhầm, checksum là tùy chọn |
| Mật độ thấp | Mỗi ký tự chiếm khoảng 13–16 lần độ rộng phần tử hẹp | Cần diện tích nhãn lớn hơn Code 128 với cùng dữ liệu |
Độ rộng phần tử hẹp nhất được gọi là X-dimension. Chiều dài mã phụ thuộc vào số ký tự, giá trị X và tỷ lệ rộng/hẹp. Vì vậy không có một kích thước in áp dụng cho mọi trường hợp. Kích thước phù hợp cần được tính dựa trên dữ liệu, độ phân giải máy in và khoảng cách quét.
2. Mã vạch Code 39 được cấu tạo như thế nào?

Đọc từ trái sang phải, một mã Code 39 gồm các thành phần sau:
- Vùng trống trái (quiet zone): khoảng sáng không in, giúp đầu đọc nhận biết ranh giới mã. ISO/IEC 16388 yêu cầu tối thiểu 10 lần X-dimension.
- Ký tự bắt đầu (start): dấu *, báo cho đầu đọc rằng dữ liệu bắt đầu.
- Các ký tự dữ liệu: mỗi ký tự gồm 5 vạch và 4 khoảng trắng, trong đó 3 phần tử rộng và 6 phần tử hẹp. Tỷ lệ rộng/hẹp nằm trong khoảng 2:1 đến 3:1.
- Khoảng cách giữa ký tự (inter-character gap): một khoảng trắng ngăn cách các ký tự, thường bằng một phần tử hẹp.
- Ký tự kết thúc (stop): cũng là dấu *, đánh dấu điểm kết thúc dữ liệu.
- Vùng trống phải: tương tự vùng trống trái.
Start và stop dùng chung một mẫu nên Code 39 có thể đọc theo hai chiều. Người dùng quét từ trái sang phải hay ngược lại đều nhận cùng kết quả.
Dòng chữ in bên dưới (human-readable text) chỉ dành cho người đọc. Máy quét không đọc phần này. Một số phần mềm hiển thị cả dấu * trong dòng chữ, nhưng dấu này không thuộc dữ liệu đầu ra.
3. Code 39 hoạt động và mã hóa dữ liệu như thế nào?
Quá trình từ dữ liệu đến mã vạch và ngược lại diễn ra như sau:
Chuỗi dữ liệu → Bộ tạo mã → Mã vạch → Đầu đọc → Dữ liệu đầu ra
Ở phía tạo mã, phần mềm nhận chuỗi dữ liệu và kiểm tra xem từng ký tự có thuộc bộ 43 ký tự hay không. Sau đó, phần mềm ánh xạ mỗi ký tự thành mẫu 9 phần tử tương ứng, thêm * ở hai đầu, chèn khoảng cách giữa ký tự và quiet zone rồi xuất ra hình mã.
Ở phía đọc, đầu đọc chiếu sáng mã và đo cường độ ánh sáng phản xạ. Vạch tối hấp thụ ánh sáng, khoảng trắng phản xạ ánh sáng. Bộ giải mã đo độ rộng từng phần tử, phân loại rộng/hẹp, nhận diện start/stop rồi tra mẫu để chuyển thành ký tự. Kết quả được gửi tới máy tính hoặc phần mềm quản lý.
Ví dụ kiểm chứng: chuỗi VN39 được mã hóa thành *VN39*. Nếu bật checksum Modulo 43, mỗi ký tự được quy đổi thành giá trị số: V = 31, N = 23, 3 = 3, 9 = 9. Tổng bằng 66, và 66 chia 43 dư 23, ứng với ký tự N. Mã cuối cùng là *VN39N*.
Với tỷ lệ 3:1, mỗi ký tự rộng 15X. Sáu ký tự cộng 5 khoảng cách cho ra 95X. Nếu X = 0,25 mm, phần mã dài khoảng 23,75 mm, chưa tính quiet zone.
Các nguyên nhân gây lỗi đọc thường gặp gồm:
- Độ tương phản giữa vạch và nền thấp
- X-dimension quá nhỏ so với độ phân giải máy in
- Quiet zone bị cắt hoặc bị chữ, viền đè lên
- Mực lem, đầu in mòn làm vạch dày hoặc đứt
- Đầu đọc chưa bật Code 39, Extended mode hoặc checksum
4. Code 39 được sử dụng trong những lĩnh vực nào?

Code 39 phù hợp với dữ liệu ngắn gồm chữ và số. Ba nhóm ứng dụng phổ biến gồm:
- Quản lý kho và nhận diện sản phẩm: dùng cho mã vị trí kệ, mã lô hoặc mã hàng nội bộ. Lợi ích là chuỗi chữ số dễ đọc bằng mắt và dễ đối chiếu. Điều kiện là nhãn đủ rộng và mã không quá dài.
- Quản lý tài sản, thiết bị và linh kiện: dùng cho tem kiểm kê máy tính, bàn ghế, dụng cụ. Lợi ích là đầu đọc phổ thông đều đọc được. Điều kiện là chất liệu nhãn phải chịu được bề mặt kim loại, nhựa hoặc môi trường dầu mỡ.
- Sản xuất, bảo trì và quy trình nội bộ: dùng cho phiếu công đoạn, thẻ bảo trì, hồ sơ. Lợi ích là dễ tích hợp với hệ thống hiện có. Điều kiện là phần mềm quản lý nhận đúng định dạng dữ liệu.
Mức độ phù hợp phụ thuộc vào mật độ dữ liệu, bề mặt dán nhãn, môi trường vận hành, thiết bị đọc và khả năng tích hợp phần mềm. Code 39 không phải yêu cầu bắt buộc chung. Hàng bán lẻ thường dùng EAN-13/UPC, còn logistics theo chuẩn GS1 thường dùng GS1-128. Bạn nên kiểm tra yêu cầu của đối tác hoặc ngành trước khi chọn mã.
5. Cách tạo mã vạch Code 39

Tạo bằng công cụ trực tuyến phù hợp khi bạn chỉ cần vài mã để thử nghiệm:
- Mở trang tạo mã vạch trực tuyến.
- Chọn loại mã Code 39 hoặc Code 39 Full ASCII nếu dữ liệu có chữ thường.
- Nhập chuỗi dữ liệu, ví dụ VN39.
- Thiết lập các tùy chọn có sẵn như X-dimension, chiều cao, tỷ lệ rộng/hẹp, checksum và dòng chữ hiển thị.
- Tạo mã và xuất tệp dạng PNG, SVG hoặc PDF. Định dạng vector như SVG hoặc PDF giữ được độ sắc nét khi in.
Tạo bằng phần mềm thiết kế và in tem nhãn phù hợp khi bạn cần in hàng loạt hoặc lấy dữ liệu từ Excel, cơ sở dữ liệu. Quy trình thường gồm các bước sau:
- Tạo mẫu tem theo khổ giấy của máy in.
- Chèn đối tượng mã vạch và chọn Code 39.
- Liên kết trường dữ liệu với cột trong tệp nguồn.
- Thiết lập tự tăng số thứ tự nếu cần, ví dụ từ TS-0001 đến TS-0500.
- In thử một tờ trước khi in toàn bộ.
Trước khi đưa mã vào sử dụng, bạn nên kiểm tra bốn điểm:
- Dữ liệu có ký tự nằm ngoài bộ 43 ký tự hay không
- Checksum có được bật đồng bộ ở cả phần mềm in và đầu đọc
- Chế độ Extended có được thiết lập thống nhất
- Bản in thử có được quét bằng chính thiết bị sẽ dùng thực tế hay chưa
6. Tóm lại, Code 39 là gì và khi nào nên sử dụng
Code 39 là mã vạch 1D hỗ trợ 43 ký tự gồm chữ in hoa, số và 7 ký tự đặc biệt. Mã có độ dài thay đổi, đọc được hai chiều và có khả năng tự kiểm tra. Điểm mạnh lớn nhất của Code 39 là khả năng tương thích: hầu hết đầu đọc và phần mềm đều hỗ trợ. Giới hạn của nó là mật độ thấp, nên mã chiếm nhiều diện tích khi dữ liệu dài.
Code 39 phù hợp cho mã tài sản, mã vị trí và quy trình nội bộ với chuỗi ngắn. Trước khi triển khai, bạn nên kiểm tra chất lượng in, cấu hình đầu đọc và tính nhất quán của dữ liệu trong môi trường thực tế.
Nếu bạn cần thiết kế, quản lý và in tem nhãn mã vạch Code 39 theo lô từ dữ liệu có sẵn, bạn có thể tham khảo các giải pháp phần mềm tại VNLabel để chọn công cụ phù hợp với quy mô và quy trình của mình.
Xem thêm: