EAN-13 là mã vạch bán lẻ 13 chữ số dùng trên sản phẩm ở hầu hết các nước, UPC-A là phiên bản 12 chữ số dùng ở Mỹ và Canada, còn Code 128 là lựa chọn linh hoạt cho nhãn vận chuyển, mã kho và số đơn hàng. Với EAN-13 và UPC-A, chữ số cuối là số kiểm tra: bạn nhân các chữ số còn lại lần lượt với 1 và 3, cộng lại, và số kiểm tra là phần cần thêm để tổng tròn chục tiếp theo. Bài này làm phép tính đó với số liệu thật, giải thích nó bắt được lỗi nào và bỏ sót lỗi nào, rồi làm tương tự cho Code 128.
Loại nào cho việc nào
| Loại | Mã hóa gì | Dùng thường gặp |
|---|---|---|
| EAN-13 | 13 chữ số | Hàng bán ở cửa hàng, sách (ISBN-13), hầu hết các nước |
| UPC-A | 12 chữ số | Sản phẩm ở Mỹ và Canada |
| EAN-8 | 8 chữ số | Gói hàng quá nhỏ để in EAN-13 |
| ITF-14 | 14 chữ số | Thùng và kiện hàng bán lẻ |
| Code 128 | Văn bản ASCII cơ bản bất kỳ, tối đa 80 ký tự trong công cụ | Nhãn vận chuyển, nhãn tài sản, số đơn hàng, mã kho nội bộ |
| Code 39 | Chữ in hoa, chữ số và vài ký hiệu | Các hệ thống cũ vẫn yêu cầu |
UPC-A giống hệt EAN-13 có thêm số 0 ở đầu. Máy quét đọc được EAN-13 sẽ đọc UPC-A là số 0 theo sau bởi 12 chữ số của nó. Mã vạch chỉ chứa một mã ngắn. Giá và tên sản phẩm nằm trong cơ sở dữ liệu của bên quét.
Số kiểm tra EAN-13, từng bước
Lấy 12 chữ số đầu của một EAN-13: 5 9 0 1 2 3 4 1 2 3 4 5. Quy tắc là nhân chúng lần lượt với 1, 3, 1, 3... từ trái sang, cộng các kết quả, rồi tìm chữ số bổ sung cho tổng tròn chục.
| Chữ số | 5 | 9 | 0 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Hệ số | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 |
| Tích | 5 | 27 | 0 | 3 | 2 | 9 | 4 | 3 | 2 | 9 | 4 | 15 |
Các tích cộng lại: 5 + 27 + 0 + 3 + 2 + 9 + 4 + 3 + 2 + 9 + 4 + 15 = 83. Số tròn chục tiếp theo là 90, và 90 trừ 83 là 7. Số kiểm tra là 7, nên số đầy đủ là 5901234123457. Nếu tổng đã tròn chục thì số kiểm tra là 0.
Có một cách nhớ khác: đếm từ phải sang, bắt đầu từ chữ số ngay trước số kiểm tra, các hệ số là 3, 1, 3, 1. Cách này đúng với mọi độ dài của số bán lẻ, và đó là lý do cùng một quy tắc dùng cho UPC-A, EAN-8 và ITF-14.
Cùng phép tính đó cho UPC-A
Số UPC-A 03600029145 có 11 chữ số trước số kiểm tra. Tính từ phải sang, hệ số đầu tiên là 3, nên tính từ trái sang thì các hệ số là 3, 1, 3, 1... và kết thúc bằng 3:
- các chữ số ở vị trí lẻ (thứ 1, 3, 5, 7, 9, 11): 0, 6, 0, 2, 1, 5, cộng lại là 14, và 14 x 3 = 42,
- các chữ số ở vị trí chẵn (thứ 2, 4, 6, 8, 10): 3, 0, 0, 9, 4, cộng lại là 16,
- tổng: 42 + 16 = 58.
Số tròn chục tiếp theo là 60, nên số kiểm tra là 2, và số đầy đủ là 036000291452. Thêm số 0 ở đầu thì được EAN-13 0036000291452, và số kiểm tra của nó cũng ra 2. EAN-8 7351353 làm tương tự: các hệ số 3, 1, 3, 1, 3, 1, 3 cho tổng 63, nên số kiểm tra là 7 và số đầy đủ là 73513537.
Số kiểm tra bắt được lỗi nào
Số kiểm tra có mặt để máy quét từ chối một lần đọc sai thay vì tính nhầm sản phẩm. Từ phép tính suy ra hai điều:
- Mọi chữ số đơn lẻ bị sai đều bị phát hiện. Các hệ số là 1 và 3, cả hai đều không có ước chung với 10, nên một chữ số bị đổi luôn làm tổng lệch khỏi bội của 10.
- Phần lớn các lần đổi chỗ hai chữ số kề nhau bị phát hiện, nhưng không phải tất cả. Đổi chỗ hai chữ số kề nhau làm tổng thay đổi bằng hai lần hiệu của chúng. Số đó là bội của 10 khi hai chữ số chênh nhau đúng 5, nên các cặp 05 và 50, 16 và 61, 27 và 72, 38 và 83, 49 và 94 lọt lưới. Số kiểm tra giảm lỗi rất nhiều. Nó không làm cho việc gõ nhầm một số trở nên bất khả thi.
Code 128 tự kiểm tra theo cách khác
Code 128 không in số kiểm tra mà mắt nhìn thấy, và bạn cũng không bao giờ gõ nó. Mã vạch có một ký tự kiểm tra mà máy quét dùng ngầm. Cách tính như sau: bắt đầu với giá trị của ký tự bắt đầu, rồi cộng giá trị của từng ký tự nhân với vị trí của nó (1 cho ký tự đầu, 2 cho ký tự thứ hai, và cứ thế), rồi lấy số dư khi chia cho 103.
Với văn bản như Hi5 ở bộ ký tự B của Code 128, giá trị bắt đầu là 104 và giá trị của một ký tự là mã ASCII của nó trừ 32, nên H là 40, i là 73 và 5 là 21:
104 + (1 x 40) + (2 x 73) + (3 x 21) = 104 + 40 + 146 + 63 = 353
353 chia 103 dư 44, nên ký tự kiểm tra có giá trị 44. Tiếp theo là ký tự kết thúc, và mã vạch hoàn chỉnh rộng 68 mô-đun, trong đó một mô-đun là vạch hẹp nhất.
Chữ số được đối xử đặc biệt. Bộ C lưu hai chữ số trong một ký tự, làm các mã toàn số ngắn đi nhiều. Với 12345678, công cụ tự chuyển sang bộ C: ký tự bắt đầu C là 105, và các giá trị là 12, 34, 56 và 78. Tổng là 105 + 12 + (2 x 34) + (3 x 56) + (4 x 78) = 105 + 12 + 68 + 168 + 312 = 665, chia 103 dư 47. Tám chữ số chỉ cần năm ký tự và mã vạch rộng 79 mô-đun, nên mã toàn số vẫn gọn mà bạn không phải làm gì.
Tạo mã vạch bằng công cụ
Công cụ tạo mã vạch làm các phép tính này và vẽ vạch ngay trong trình duyệt, nên những gì bạn gõ không bị tải lên.
- Chọn loại, ví dụ EAN-13. Dòng dưới ô nhập cho biết loại đó nhận gì.
- Gõ 12 chữ số, không kèm số kiểm tra. Công cụ tự thêm và cho bạn biết, ví dụ "đã thêm số kiểm tra 7".
- Hoặc gõ đủ 13 chữ số. Công cụ kiểm tra chữ số cuối. Nếu sai, nó hiện chữ số đúng phải là gì, và xóa chữ số cuối của bạn thì nó sẽ thêm chữ số đúng.
- Giữ vạch tối trên nền sáng, chừa vùng trống hai bên (vùng yên tĩnh), rồi tải SVG để in hoặc PNG để dùng trên màn hình.
- Quét thử bản in bằng chính máy quét sẽ dùng trước khi in một nghìn nhãn.
Những lỗi nên tránh
- Tự đặt số sản phẩm để bán ở cửa hàng. Một số bạn tự nghĩ ra có thể trùng với số của người khác. Số bán lẻ nên đến từ GS1, tổ chức cấp tiền tố cho doanh nghiệp, nơi các cửa hàng và sàn thương mại điện tử dựa vào. Dùng nội bộ thì số nào cũng được, và Code 128 đơn giản hơn.
- Gõ số vào bảng tính trước. Số 0 ở đầu biến mất, và mã vạch sẽ sai độ dài. Hãy giữ các chữ số dưới dạng văn bản.
- Đếm hệ số từ nhầm đầu. Với 12 chữ số của EAN-13, hệ số đầu tiên là 1, nhưng với 11 chữ số của UPC-A thì là 3. Khi phân vân, hãy đếm từ phải sang: chữ số cạnh số kiểm tra luôn có hệ số 3.
- Kéo giãn mã vạch theo một trục. Điều đó làm đổi độ rộng của các vạch và việc quét thất bại.
Nếu thứ bạn cần là một liên kết hay thông tin Wi-Fi thay vì số sản phẩm, mã QR là định dạng phù hợp hơn.