top of page

Cách tính mã vạch để xem độ chính xác (P1)

Bạn đã bao giờ nhìn một mã vạch mà không biết nó chính xác hay không? Ở trong bài giới thiệu về các loại mã vạch mình có nói đến số cuối cùng của mã. Nó là số check lỗi, nhưng bạn có biết số check lỗi đó được tính ra sao không? Qua bài này bạn sẽ hiểu chúng được tính như thế nào. Và cách tính mã vạch để xem mã có chính xác hay không. Tất cả mình sẽ cố gắng đi chi tiết về từng thứ. Phần này sẽ chỉ đi về mã 1D thôi.

Cách tính mã vạch - giới thiệu
Các loại mã vạch 1D tính như thế nào?

 

Các loại modulo và cách tính mã vạch các loại

Trước khi đi vào cách tính mã vạch để xem độ chính xác, thì có thứ bạn cần xem qua. Đó chính là các modulo để tính số check lỗi. Một số mã không hiển thị số check lỗi trên số in ngoài. Nên qua modulo bạn mới có thể tính được chúng.

1. Các loại modulo áp dụng cho phương thức tính mã vạch

1.1. Cách tính mã vạch sử dụng Modulo 10

Đây là loại Modulo mà bạn hay thấy nhất khi sử dụng tính mã EAN-13. Bản chất là dùng số dư của bội số của 10 để tính ra số check-digit. Cộng các số ở vị trí chẵn và lẻ. Sau đó cộng 2 kết quả và lấy bội số của 10 lớn hơn gần nó nhất. Cuối cùng lấy bội số trừ đi kết quả cộng, thì sẽ ra check-digit.


Cách tính mã vạch - Modulo 10
Mã EAN-13 và nhiều mã khác vận dụng cách tính Modulo 10

Có một số mã chia vị trí chẵn lẻ rồi nhân các số đó với 1 hoặc 3. Sau đó cộng kết quả lại và tìm số bội của 10 gần nhất.


Tuy nhiên tùy theo loại mã mà bạn sẽ có cách tính dựa theo Modulo 10 khác nhau. Mình sẽ đi chi tiết hơn về các loại mã khác nhau ở phần thứ 2 phía dưới nhé!

1.2. Cách tính theo Modulo 11

Đây là loại Modulo được áp dụng khá nhiều trong cách tính digit của mã PZN. Một số loại mã khác sử dụng nó là ISBN-10 và ISSN. Cách tính là lấy nhỏ nhất có thể thêm vào để tổng các tích của mã chia hết cho 11. Ví dụ như sau:


Cách tính mã vạch - Modulo 11

Ta có 388053101-A với A là số kiểm tra. Ta lấy từ số bên phải cùng là 9, lấy số đó nhân 2. Sau đó số tiếp theo là 8 nhân với 3. Nếu vậy bạn sẽ có kết quả như sau: 1 x 2 + 0 x 3 + 1 x 4 + 3 x 5 + 5 x 6 + 0 x7 + 8 x 8 + 8 x 9 + 3 x 10. Tổng là 217. Số gần nhất có thể chia hết cho 11 là 220. 220 chia 11 bằng 20. Lấy 220 – 217 là có 3. Vậy số hoàn chỉnh là 3-880-53101-3. A là 3.


Ví dụ từng loại mã mình sẽ đi chi tiết ở dưới.

1.3. Modulo 47

Modulo 47 là cách tính mã vạch cho mã vạch 93 (Code 93). Để tính bảng mã này, bạn sẽ cần có mục đối chiếu ID kí tự. Bạn tính check-degit 2 lần. Vì code 93 có 2 số check lỗi là C và K. Sau khi lấy tổng số của các tích kí tự theo vị trí. Bạn sẽ lấy chúng chia cho 47, 2 số dư đối chiếu với bảng, sẽ ra kí tự check-digit.


Cách tính mã vạch - Modulo 47

1.4. Cách tính mã vạch theo Modulo 16


Codabar là mã tiếp theo mình muốn nói đến vì nó tính bởi Modulo 16. Như Modulo 47 bạn cũng sẽ có bảng đối chiếu. Mỗi kí tự sẽ có số đối chiếu nhất định. Lấy số đối chiếu của các kí tự cộng lại với nhau. Sau đó chia cho 16. Sau đó lại lấy 16 trừ cho số dư của phép chia đó sẽ ra số đối chiếu của check-digit.


Cách tính mã vạch - Modulo 16

1.5. Modulo 43 cho việc tính mã vạch

Nếu 47 là cho mã 93, thì Modulo 43 là dành cho cách tính mã 39. Mã 93 chỉ có 1 kí tự kiểm tra. Nên lấy tổng số đối chiếu cho các kí tự ở đó cộng lại. Sau đó chia 43, lấy số dư đối chiếu với bảng kí tự. Vậy là bạn đã có số check rồi.


Cách tính mã vạch - Modulo 43
Giống như code 93, Code 39 thường không in ra số kiểm tra

1.6. Modulo 103

Bạn sẽ cần bảng đối chiếu các kí tự ASCII để tính cho Modulo 103 này. Các mã 128 (GS1, EAN, UCC) vận dụng phương thức tính modulo này. Cách tính mã vạch của Modulo 103 bao gồm:

· Đánh số thứ tự từ trái sang phải

· Đối chiếu kí tư (số) với bảng ASCII. Rồi ghi vào tương ứng.

· Nhân số đối chiếu của kí tự với số vị trí của nó. Sau đó cộng tất cả kết quả lại.

· Lấy kết quả trên chia cho 13. Sau đó số dư của phép tính chính là số đối chiếu check-digit.

· Check với bảng ASCII, bạn sẽ ra được kí tự kiểm tra.


Cách tính mã vạch - Modulo 103

2. Các tính chi tiết một số loại mã vạch

Dựa theo các modulo trên, mình sẽ tính mẫu cho bạn một số loại mã vạch thông dụng. Từ đó bạn có thể dễ dàng tính các mã vạch cùng 1 modulo tương tự.

2.1. Một số mã vạch theo Modulo 10

2.1.1. Cách tính mã vạch Mã EAN-13

Ở bài định nghĩa về mã vạch mình có nói đến cách tính mã EAN-13 ở cuối bài. Tuy nhiên đó chỉ là 1 cách tính thôi. Cách thứ 2 bạn có thể làm như sau:


Cách tính mã vạch - EAN 13

Ví dụ bạn có một mã vạch nhật bản như sau: 494-684250190-8. Đây là mã vạch kẹo ngậm Mintia. Bạn phân các vị trí lẻ thì để 1, chẵn thì để số 3 (trừ số cuối cùng ra nhé). Như vậy bạn có phép tính:

  • 4 x 1 + 9 x 3 + 4 x 1 + 6 x 3 + 8 x 1 + 4 x 3 + 2 x 1 + 5 x 3 + 0 x 1 + 1 x 3 + 9 x 1 + 0 x 3 = 102

Số gần 102 nhất chia hết cho 10 là 110. Lấy số đó trừ đi 102 còn 8. Đó chính là số check-digit (tương tự như số 8 cuối cùng). Đó là cách tính cho EAN-13. Nhưng các mã khác có cách tính khác như dưới đây.

2.1.2. Mã 2 of 5 và Interleaved 2 of 5


Cách tính mã vạch - Interleaved 2 of 5

Hai loại mã này lại để số vị trí lẻ là 3 và số vị trí chẵn là 1. Lấy ví dụ một mã I-25 như sau: 006-14141-00041-8. Bạn có phép tính hình thành (trừ số cuối cùng):

  • 0 x 3 + 0 x 1 + 6 x 3 + 1 x 1 + 4 x 3 + 1 x 1 + 4 x 3 + 1 x 1 + 0 x 3 + 0 x 1 + 0 x 3 + 4 x 1 + 1 x 3 = 52

Bộ số gần chia hết cho 10 lớn hơn 52 gần nó nhất là 60. Lấy 60 – 52 còn 8. Đó là số kiểm lỗi, trùng số 8 cuối mã.

EAN-14, SCC-14, ITF-14 và DUN-14 cũng có cách tính mã vạch 3-1 tương tự như trên.


2.1.3. Mã Indent-code và Leitcode


Cách tính mã vạch - Leitcode
Leitcode có thiết kế dễ nhìn ra số kiểm tra

Trong bài các biến thể mã vạch 1D mình có nói đến 2 mã này ở mục số 10. Mã Indent Code tương tự như EAN-13 nên mình sẽ đi vào Leit thôi. Ví dụ 1 mã Leitcode mang số 50823-007-028-00-5. Leitcode thì nhân số vị trí lẻ cho 4 và vị trí chẵn cho 9. Bạn có phép tính như sau (nhớ bỏ số cuối cùng):

  • 5 x 4 + 0 x 9 + 8 x 4 + 2 x 9 + 3 x 4 + 0 x 9 + 0 x 4 + 7 x 9 + 0 x 4 + 2 x 9 + 8 x 4 + 0 x 9 + 0 x 4 = 195

Số chia hết cho 10 gần nhất với kết quả là 200. Lấy nó trừ đi 195 là còn 5. Check-digit là 5 trùng với số cuối đấy phải không?

2.2. Các mã sử dụng Modulo 11

2.2.1. Cách tính mã vạch PZN


Cách tính mã vạch - PZN

Thử xem qua một mã vạch PZN-4908802. Lấy 6 số đầu tiên để tính xem check-digit có trùng với số cuối không. Số đầu tiên nhân với 2, số thứ 2 nhân với 3, số thứ 3 nhân với 4 và tiếp tục. Bạn có phép tính sau:

  • 4 x 2 + 9 x 3 + 0 x 4 + 8 x 5 + 8 x 6 + 0 x 7 = 123

Lấy 123 chia cho 11 thì ra 11 còn dư 2. Số 2 này chính là số chỉnh lỗi của mã PZN trên. Giống với số cuối cùng đúng không nào?

2.2.2. Mã ISSN và ISBN


Mã ISBN và ISSN có cách tính ngược lại là lấy số cuối (trừ số check) nhân cho 2. Sau đó đi ngược về trước rồi nhân tính tổng. Sau đó lấy số lớn hơn gần tổng nhất chia hết cho 11. Sau đó trừ đi kết quả tổng vừa rồi sẽ ra số kiểm tra. Bạn có thể xem lại ví dụ 388053101-A phần 1.2.


Lưu ý: Mã PZN nếu bạn ra số 10 là check-degit thì mã sẽ không được phát hành. ISBN và ISSN nếu ra số 10 thì trong mã sẽ để là X.

2.3. Tính mã vạch dùng Modulo 43 (Code 39)


Cách tính mã vạch - Code 93

Với mã 39 bạn cần có bảng đối chiếu. Lấy mã WIKI39 làm ví dụ. Nên nhớ code39 kể cả khoảng trắng cũng tính là kí tự Nên WIKI39 và WIKI 39 sẽ có check-digit khác nhau. Với WIKI39, bạn nhìn bảng dưới sẽ ra số đối chiếu của chúng.


Cách tính mã vạch - Code39
Bảng các kí tự đối chiếu của code 39

Như hình, thì WIKI39 sẽ tương ứng lần lượt với 32, 18, 20, 18, 3 và 9. Bạn cộng chúng lại để có:

  • 32 + 18 + 20 + 18 + 3 + 9 = 100

Lấy 100 chia cho 43 = 2 còn dư 14. Bạn đối chiếu số 14 trong bảng là kí tự E. Đó chính là Check-digit của mã Code39 này. Đầy đủ là WIKI39E.

2.4. Cách tính mã vạch Code93 (Modulo 47)

2.4.1. Tính số kiểm tra C

Check mã *CODE 93* này xem sao nhé. Code93 có 2 số kiểm tra là C và K. Ta bắt đầu tính số C trước. Bảng đối chiếu của Code 93 dài hơn một chút, vì có 46 kí tự mã hóa. Bạn có thể xem hình:


Cách tính mã vạch - Code93
Bảng mã đối chiếu code93

Các chữ CODE 93 có các kí tự tương ứng lần lượt với 12, 24, 13, 14, 38, 9 và 3. Tiếp theo, từ phải qua trái bạn đánh số thứ tự từ 1 đến hết. Kết quả sẽ được như sau:


Cách tính mã vạch - Code 93

Sau đó tiếp tục nhân số đối chiếu với số vị trí tương ứng của chúng. Bạn sẽ được một phép tính:

  • 12 x 7 + 24 x 6 + 13 x 5 + 14 x 4 + 38 x 3 + 9 x 2 + 3 x 1 = 484

Lấy 484 chia cho 47 được 10 còn dư 14. Bạn check nó với bảng đối chiếu được kí tự E. Đó là số kiểm tra C. Mã là CODE 39E. Số này sẽ tiếp tục giúp bạn tìm ra số kiểm tra K.


2.4.2. Tính số kiểm tra K

Sau khi có CODE 39E phía trên, bạn lặp lại bước phân số thứ tự phía trên. Nhưng lần này bạn tính thêm cả số check lỗi C vào. Kết quả được như hình:



Sau khi xong, bạn tiếp tục thực hiện phép tính trên. Bạn sẽ được:

  • 12 x 8 + 24 x 7 + 13 x 6 + 14 x 5 + 38 x 4 + 9 x 3 + 3 x 2 + 14 x 1 = 611

Lấy tổng này tiếp tục chia cho 47, bạn được 13 không dư. Vậy số dư là 0, đối chiếu bảng là số 0. Đây chính là số kiểm lỗi K của bạn. Mã đầy đủ lúc này sẽ là *CODE 93E0*


Lưu ý: Thường mã 39 và mã 93 không in ra các kí tự check lỗi (như mình nói ở trên). Nên bạn có thể đối chiếu với một số web tính mã vạch online.

2.5. Cách tính mã vạch các loại 128 (Theo Modulo 103)


2.5.1. Xác định loại bảng mã

Mã 128 (Code128) là một loại mã khá phức tạp. Không những nó là bộ ASCII mà còn có loại Code-A, B hay C. Để nhận biết mã này, bạn nên nhìn vào mã bắt đầu của nó. Lấy luôn một ví dụ về đoạn mã Wikipedia cùng xem nào. Mã 128 chia độ rộng của thanh mã đen và khoảng trắng theo số 1, 2, 3 và 4. Với 4 là lớn nhất và 1 là nhỏ nhất.


Cách tính mã vạch - Code 128

Bạn nhìn vào start code, thấy rằng đoạn mã có cấu tạo là 211214. Nên nó là cấu tạo mã Code B. Dựa vào thanh mã nhỏ nhất mà bạn sẽ xác định được độ rộng. Code A, B và C được nhận biết qua cấu tạo theo bảng dưới.


Cách tính mã vạch - Code 128

2.5.2. Tính mã Code 128

Sau khi xác định xong Code cần tính, thì bạn nhìn trong bảng link này để xác định số đối chiếu. Sau khi xem thì Chữ Wikipedia tương ứng với 55, 73, 75, 73, 80, 69, 68, 73, 65. Nên nhớ ASCII có phân biệt chữ hoa chữ thường.


Sau đó từ trái sang phải, bạn đánh số vị trí từ thấp đến cao. Kí tự đầu là 1, kí tự thứ 2 là 2, thứ 3 là 3, và tiếp tục. Như Wikipedia thì sẽ có vị trí từ 1 đến 9. Tiếp đó bạn nhân số đối chiếu của kí tự với số vị trí tương ứng của chúng. Ta có kết quả:

  • 55 x 1 + 73 x 2 + 75 x 3 + 73 x 4 + 80 x 5 + 69 x 6 + 68 x 7 + 73 x 8 + 65 x 9 = 3177

Lấy kết quả này chia cho 103 ta được 30 dư 87. Đối chiếu với bảng Code B, 87 là w. Đó chính là kí tự check lỗi. Mã đầy đủ là [Start B]-Wikipedia-w.


Lưu ý: Một số máy quét mã vạch khi quét sẽ không hiện ra code như trên. Điển hình như Honeywell sẽ hiện ra B Wikipedia(87). Bạn có thể đối chiếu số bạn tính được với kết quả từ máy đọc.

3. Lời kết


Đó là cách tính mã vạch mà bạn có thể vận dụng. Nên nhớ đây chỉ áp dụng cho các mã 1D thôi nhé. Mã 2D mình sẽ đi vào một bài khác. Mình hi vọng bạn có thể tính được khi không có hỗ trợ từ máy đọc mã vạch giá rẻ.

Comments


Featured Posts
Recent Posts
Archive
Search By Tags
Follow Us
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page