“Giải mã” mã vạch EAN-13
Đã bao giờ bạn hỏi mã vạch được hình thành theo quy tắc nào, nó được xử lý như thế nào và có ứng dụng gì trong thực tiễn? Bài viết sau đây sẽ giúp bạn hình dung đôi nét cơ bản về vấn đề này…
1. Mã hóa sản phẩm
Chúng ta thường thấy trên các sản phẩm thường ghi thông tin nguồn gốc xuất xứ, nhà sản xuất, tên sản phẩm…để tham khảo khi sử dụng. Tuy nhiên rõ ràng là với nhiều thông tin cần phải đọc như thế thì rất mất thời gian trong việc quản lý các sản phẩm. Để giải quyết vấn đề này người ta mã hóa các thông tin này thành một chuỗi số.
Với chuẩn mã hóa EAN-13, thông tin mã hóa sản phẩm sẽ bao gồm chuỗi 13 chữ số (0 đến 9) bao gồm:
– 2 hoặc 3 chữ số đầu dùng để chỉ thị quốc gia phát hành mã vạch (chứ không nhất thiết phải là quốc gia sản xuất ra sản phẩm)
– 5 hoặc 4 chữ số tiếp theo dùng để chị thị mã của nhà sản xuất
– 5 chữ số tiếp theo chỉ thị mã sản phẩm
– Chữ số cuối cùng gọi là mã kiểm tra
Để hình dung rõ hơn về mã quốc gia, bạn tham khảo bảng mã sau:
Ta cũng có thể thấy rằng, dù mã số quốc gia có thể có 2 hoặc 3 chữ số nhưng không gây ra sự nhầm lẫn. Ví dụ mã quốc gia của Việt Nam là 893 thì không thể có mã quốc gia nào khác là 89 (nếu có thì sẽ gây ra nhầm lẫn). Từ đó ta có thể có quy tắc để tự dò tìm mã quốc gia trên mã sản phẩm (13 chữ số) như sau: trước hết lấy 2 chữ số đầu tiên rồi so sánh với bảng mã trên, nếu không tìm được tên quốc gia thì lấy 3 chữ số đầu tiên rồi so sánh.
Tương tự như vậy, tên nhà sản xuất cũng được mã hóa. Ta thấy rằng nếu dùng 4 chữ số thì ta có thể mã hóa được 10.000 nhà sản xuất (từ 0000 đến 9999). Mã này được tổ chức quản lý EAN tại nước sở tại cấp cho nhà sản xuất. Như vậy ở Việt Nam, để quản lý mã vạch cho hơn 10.000 nhà sản xuất, chúng ta buộc phải dùng thêm các chuẩn mã hóa khác.
Tiếp theo, sản phẩm được mã hóa bởi một chuỗi 5 chữ số. Như vậy một nhà sản xuất có thể mã hóa được 100.000 sản phẩm khác nhau (từ 00000 đến 99999).
Quy tắc xác định ký tự mã hóa cuối cùng trong chuỗi mã hóa sản phẩm
Ký tự cuối cùng trong chuỗi 13 chữ số của mã sản phẩm được gọi là mã kiểm tra.
Số kiểm tra là số thứ 13 của EAN-13. Nó không phải là một số tùy ý mà phụ thuộc vào 12 số đứng trước đó và được tính theo quy tắc sau:
– Lấy tổng tất cả các số ở vị trí lẻ (1,3,5,7,9,11) được một số A.
– Lấy tổng tất cả các số ở vị trí chẵn (2,4,6,8,10,12). Tổng này nhân với 3 được một số B.
– Lấy tổng của A và B được số A + B.
– Lấy phần dư trong phép chia của A + B cho 10, gọi là số x. Nếu số dư này bằng 0 thì số kiểm tra bằng 0, nếu nó khác 0 thì số kiểm tra là phần bù (10 – x) của số dư đó.
Chúng ta thấy có vẻ như quy tắc xác định giá trị của mã kiểm tra giống như một trò chơi nhưng lại không có một ý nghĩa nào từ chữ số đó. Hiện tại, chúng tôi, những người biên tập nội dung này, cũng chưa tìm hiểu được ý nghĩa của kỹ tự này. Hy vọng rằng nó sẽ được khám phá vào đăng tải lại vào bài viết sớm nhất!!!
2. Quy tắc in mã vạch
Chúng ta dùng một chuỗi dạng như chuỗi nhị phân để “mã hóa bit” các chữ số từ 0 đến 9 kèm theo một quy tắc như trò chơi:
Giá trị số | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Quy tắc lẻ | 0001101 | 0011001 | 0010011 | 0111101 | 0100011 | 0110001 | 0101111 | 0111011 | 0110111 | 0001011 |
Quy tắc chẵn | 0100111 | 0110011 | 0011011 | 0100001 | 0011101 | 0111001 | 0000101 | 0010001 | 0001001 | 0010111 |
(Bảng mã hóa theo quy tắc chẵn lẻ)
Cũng là chữ số 0 nhưng nếu chúng ta theo quy tắc lẻ thì mã hóa của nó là 0001101, nhưng theo quy tắc chẵn thì lại là 0100111.
Khi in, các ký tự 0 và 1 sẽ được mã hóa và được máy in mã vạch hiểu và in bằng một vạch có độ rộng như nhau, ký tự 0 có màu trắng còn ký tự 1 có màu đen.
Tuy nhiên, ngoài các ký tự trong chuỗi mã hóa sản phẩm, người ta in thêm các vạch gọi là các vạch bảo vệ để giúp các thiết bị đọc mã vạch hoạt động chính xác hơn. Cụ thể quy tắc in mã vạch được thực hiện như sau:
Chữ số đầu tiên – Các vạch bảo vệ trái – 6 chữ số tiếp theo – Các vạch bảo vệ trung tâm – 6 chữ số tiếp theo – Các vạch bảo vệ phải.
Quy tắc “mã hóa bit” 6 chữ số từ 2 đến 7 trong chuỗi mã sản phẩm xác định dựa theo chữ số đầu tiên của chuỗi, xác định theo bảng sau đây:
Số đầu tiên | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
0 | Lẻ | Lẻ | Lẻ | Lẻ | Lẻ | Lẻ |
1 | Lẻ | Lẻ | Chẵn | Lẻ | Chẵn | Chẵn |
2 | Lẻ | Lẻ | Chẵn | Chẵn | Lẻ | Chẵn |
3 | Lẻ | Lẻ | Chẵn | Chẵn | Chẵn | Lẻ |
4 | Lẻ | Chẵn | Lẻ | Lẻ | Chẵn | Chẵn |
5 | Lẻ | Chẵn | Chẵn | Lẻ | Lẻ | Chẵn |
6 | Lẻ | Chẵn | Chẵn | Chẵn | Lẻ | Lẻ |
7 | Lẻ | Chẵn | Lẻ | Chẵn | Lẻ | Chẵn |
8 | Lẻ | Chẵn | Lẻ | Chẵn | Chẵn | Lẻ |
9 | Lẻ | Chẵn | Chẵn | Lẻ | Chẵn | Lẻ |
Các chữ số từ 8 đến 13 được “mã hóa bit” được thực hiện bằng cách “đảo ngược bit” (đổi 0 thành 1 và ngược lại) của quy tắc lẻ. Giả sử chữ số ở vị trí thứ 10 là 5, theo quy tắc lẻ nó sẽ được mã hóa bằng 0110001, thế thì theo quy tắc đảo ngược bit, nó sẽ được mã hóa là 1001110.
Các vạch bảo vệ trái và phải được mã hóa thành 101, các vạch bảo vệ trung tâm được mã hóa thành 01010. Kết quả in mã vạch có dạng như hình vẽ bên:
(Chữ số đầu tiên cũng được in phía trong vạch bảo vệ trái, nhưng khi hiện thị thì nó lồi ra ngoài vạch bảo vệ trái để nhấn mạnh vai trò của nó)
Mặc dù quy tắc tạo mã sản phẩm và in mã vạch khá phức tạp như vậy, song đối với một đơn vị bán lẻ, chúng ta có thể tạo ra những mã vạch riêng cho mình. Chúng ta chỉ cần mã hóa các sản phẩm để phân biệt chúng với nhau, vì vậy, các thông số mã quốc gia hay nhà sản xuất là không cần thiết. Như vậy chúng ta có thể dùng 13 chữ số để đánh mã sản phẩm, và như vậy số lượng hóa có thể quản lý là rất nhiều.
3. Phần mềm in mã vạch
Mặc dù quy tắc mã hóa sản phẩm và quy tắc in mã vạch là khá phức tạp như mô tả ở trên, tuy nhiên các phần mềm chuyên dụng như Bartender sẽ in cho mã vạch cho chúng ta khi chúng nhận được một chuỗi ký tự số (13 chữ số).
Sau khi dán lên sản phẩm, mã vạch mang thông tin của sản phẩm và khi sử dụng máy quét mã vạch để hiển thị mã vạch của nó, chúng ta sẽ “giải mã” lại các thông tin đó của sản phẩm, giúp quá trình quản lý được nhanh chóng và tiết kiệm công sức gấp bội.