Chữ số kiểm tra là một hoặc hai chữ số thêm vào cuối mã số, được tính bằng phép chia lấy dư (cho 10, 11 hoặc 97) sao cho toàn bộ mã thoả một điều kiện chia hết. Gõ hay đọc nhầm một chữ số, điều kiện ấy hỏng và máy phát hiện ngay. Chọn số chia nào quyết định bắt được bao nhiêu loại lỗi: chia cho 10 tiện nhưng sót vài lỗi đảo chỗ, chia cho 11 bắt hết nhưng đôi khi phải dùng chữ X, chia cho 97 gần như không sót gì.
Người ta hay nhầm kiểu gì
Thiết kế chữ số kiểm tra bắt đầu từ việc đếm lỗi thật. Các khảo sát về lỗi chép và nhập số, trong đó nghiên cứu của nhà toán học Hà Lan Jacobus Verhoeff công bố năm 1969 hay được dẫn nhất, cho thấy:
- Sai một chữ số (gõ 5 thành 6) chiếm phần lớn, khoảng bốn phần năm số lỗi.
- Đảo chỗ hai chữ số liền nhau (gõ 37 thành 73) đứng thứ hai, khoảng một phần mười.
- Còn lại là các lỗi hiếm hơn: đảo chỗ cách một chữ số (123 thành 321), lỗi cặp đôi (11 thành 22), lỗi do đọc nhầm âm ("mười ba" và "ba mươi").
Một chữ số kiểm tra tốt phải bắt được trọn hai loại đầu. Chỉ cộng các chữ số lại rồi lấy dư cho 10 thì bắt được sai một chữ số, nhưng đảo chỗ không làm đổi tổng nên lọt hết. Vì vậy mọi hệ thống thực tế đều gán trọng số khác nhau cho từng vị trí.
Chia cho 10 với trọng số 1 và 3: mã vạch EAN-13
Mã vạch hàng hoá EAN-13 có 13 chữ số, chữ số cuối là chữ số kiểm tra. Cách tính: 12 chữ số đầu, vị trí lẻ (thứ 1, 3, 5…) nhân 1, vị trí chẵn nhân 3, cộng lại; chữ số kiểm tra là số cần thêm để tổng chia hết cho 10.
Ví dụ với dãy giả định 893523601234:
- Vị trí lẻ: 8 + 3 + 2 + 6 + 1 + 3 = 23.
- Vị trí chẵn: 9 + 5 + 3 + 0 + 2 + 4 = 23, nhân 3 được 69.
- Tổng: 23 + 69 = 92. Cần thêm 8 để thành 100.
Chữ số kiểm tra là 8, mã đầy đủ là 8935236012348. Máy quét ở quầy thu ngân làm phép tính này mỗi lần "tít"; nếu tổng không chia hết cho 10, máy bỏ qua lần quét đó và đợi quét lại.
Trọng số 3 được chọn vì 3 và 10 nguyên tố cùng nhau, nên đổi một chữ số luôn làm đổi tổng: bắt được 100% lỗi sai một chữ số. Với lỗi đảo hai chữ số liền nhau a và b, tổng đổi một lượng bằng 2 × (a − b). Lượng này chia hết cho 10 khi a và b chênh nhau đúng 5, như cặp 1 và 6, 3 và 8. Vậy EAN-13 sót các lỗi đảo chỗ của những cặp chênh 5, còn lại bắt hết. Cái giá nhỏ để đổi lấy phép tính đơn giản.
Chia cho 11: vì sao ISBN-10 bắt được mọi lỗi đảo chỗ
Mã sách ISBN-10 (dùng đến năm 2006) nhân 10 chữ số với trọng số 10, 9, 8… đến 1 và yêu cầu tổng chia hết cho 11. Ví dụ ISBN 0-306-40615-2: 0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 = 130. 130 chia 11 dư 9, cần cộng thêm 2 để thành 132, chia hết cho 11. Chữ số kiểm tra là 2.
Ưu điểm nằm ở số 11. Vì 11 là số nguyên tố, lớn hơn mọi chữ số và mọi trọng số, nên:
- Sai một chữ số làm tổng đổi một lượng bằng (trọng số × độ lệch), không bao giờ chia hết cho 11. Bắt được hết.
- Đảo chỗ hai chữ số bất kỳ, kể cả không liền nhau, làm tổng đổi một lượng bằng (hiệu trọng số × hiệu hai chữ số), cũng không chia hết cho 11. Bắt được hết.
Nhược điểm: phần dư cho 11 có thể cần chữ số kiểm tra là 10, mà 10 có hai chữ số. Người ta viết chữ X (số La Mã của 10). Đây là lý do một số sách cũ có ISBN kết thúc bằng X. Từ năm 2007, ISBN chuyển sang 13 chữ số theo đúng cách tính của mã vạch EAN-13, chia cho 10, chấp nhận sót một ít lỗi đảo chỗ để khớp với hệ thống mã vạch toàn cầu.
Chia cho 97: số tài khoản quốc tế IBAN
Nhiều nước, nhất là ở châu Âu và Trung Đông, viết số tài khoản ngân hàng theo chuẩn IBAN (ISO 13616). Một IBAN bắt đầu bằng mã nước hai chữ cái và hai chữ số kiểm tra. Cách kiểm tra, theo chuẩn ISO 7064:
- Chuyển bốn ký tự đầu xuống cuối.
- Đổi mỗi chữ cái thành số: A = 10, B = 11… Z = 35.
- Coi cả dãy là một số nguyên rất dài, chia cho 97. Dư đúng 1 là hợp lệ.
Lấy IBAN mẫu thường dùng trong tài liệu: GB82 WEST 1234 5698 7654 32. Chuyển "GB82" xuống cuối, đổi G = 16, B = 11, W = 32, E = 14, S = 28, T = 29, được số 28 chữ số: 3214282912345698765432161182. Không cần máy tính số lớn, ta chia từng khúc:
| Khúc đem chia | Dư khi chia 97 |
|---|---|
| 321428291 | 70 |
| 70 ghép 2345698 → 702345698 | 29 |
| 29 ghép 7654321 → 297654321 | 24 |
| 24 ghép 61182 → 2461182 | 1 |
Dư 1, IBAN hợp lệ. Mẹo chia từng khúc đúng vì chỉ phần dư mang sang bước sau là quan trọng, giống hệt phép chia dài.
Vì sao 97? Đó là số nguyên tố lớn nhất có hai chữ số, và hai chữ số kiểm tra cho 97 khả năng thay vì 10. Kết quả: bắt được mọi lỗi sai một ký tự, hầu như mọi lỗi đảo chỗ, và chỉ khoảng 1 trên 97 trường hợp lỗi ngẫu nhiên phức tạp hơn tình cờ lọt qua. Việt Nam không dùng IBAN cho tài khoản trong nước; chuyển tiền quốc tế đi Việt Nam dùng mã SWIFT của ngân hàng kèm số tài khoản.
Bảng so sánh các cách kiểm
| Hệ thống | Phép chia | Sai một chữ số | Đảo hai chữ số liền nhau |
|---|---|---|---|
| Cộng thẳng | 10 | Bắt hết | Sót hết |
| EAN-13, ISBN-13 | 10, trọng số 1–3 | Bắt hết | Sót cặp chênh 5 |
| Luhn (thẻ ngân hàng, IMEI) | 10, nhân đôi xen kẽ | Bắt hết | Sót cặp 0–9 |
| ISBN-10 | 11, trọng số 10…1 | Bắt hết | Bắt hết |
| IBAN | 97, hai chữ số | Bắt hết | Gần như bắt hết |
Khi dữ liệu dài hơn: CRC và mã sửa lỗi
Với tệp tin, gói dữ liệu mạng hay đĩa nén, một chữ số không đủ. Người ta dùng CRC (kiểm tra dư vòng): coi cả khối dữ liệu là một đa thức nhị phân, chia cho một đa thức cố định, và gửi kèm phần dư. Bên nhận chia lại, thấy phần dư khác là biết dữ liệu hỏng. Đây vẫn là phép chia lấy dư, chỉ là trên đa thức thay vì số. Mã QR đi xa hơn: dùng mã Reed–Solomon để không chỉ phát hiện mà còn sửa được lỗi, nên mã bị bẩn hay rách một góc vẫn quét được.
Số căn cước 12 chữ số của Việt Nam gồm những gì
Số định danh cá nhân, in trên thẻ căn cước, có 12 chữ số. Theo các văn bản hướng dẫn công khai của Bộ Công an, cấu trúc gồm:
- 3 chữ số đầu: mã tỉnh, thành phố nơi đăng ký khai sinh (ví dụ 001 là Hà Nội, 079 là Thành phố Hồ Chí Minh).
- Chữ số thứ 4: mã giới tính kết hợp thế kỷ sinh. Sinh trong thế kỷ 20: nam 0, nữ 1. Thế kỷ 21: nam 2, nữ 3. Các thế kỷ sau tiếp tục theo cặp.
- Chữ số thứ 5 và 6: hai số cuối của năm sinh.
- 6 chữ số cuối: khoảng số ngẫu nhiên.
Các văn bản công khai mô tả cấu trúc này không nêu chữ số kiểm tra nào, nên không thể tự kiểm một số căn cước bằng phép chia như với mã vạch hay số thẻ. Số căn cước ngày nay chủ yếu được đọc từ chip và mã QR trên thẻ, rồi đối chiếu với cơ sở dữ liệu dân cư, nên việc gõ nhầm được phát hiện theo đường khác. Một lưu ý: số căn cước gắn với nhiều dịch vụ (ngân hàng, bảo hiểm, thuế), đừng đăng ảnh thẻ lên mạng xã hội.
Góc nhìn hôm nay: tự đặt chữ số kiểm tra cho mã của mình
Cửa hàng nhỏ tự đánh mã hàng, trường học đánh số báo danh, kho tự dán mã kệ đều có thể thêm chữ số kiểm tra để bớt lỗi nhập. Cách đơn giản và bắt được hết hai loại lỗi phổ biến, với mã không quá 10 chữ số: nhân các chữ số với trọng số 1, 2, 3… từ trái sang, lấy tổng chia 11; nếu dư 10 thì bỏ mã đó, dùng mã kế tiếp, để khỏi phải viết X. Bảng tính Excel làm được bằng một công thức SUMPRODUCT và MOD. Chỉ cần nhớ: chữ số kiểm tra chống nhầm lẫn, không chống gian lận, vì cách tính ai cũng biết.
Câu hỏi thường gặp
Chữ số kiểm tra là gì?
Là chữ số thêm vào cuối một mã số, tính từ các chữ số còn lại bằng phép chia lấy dư, để phát hiện lỗi gõ hay đọc nhầm. Mã vạch, ISBN, số thẻ ngân hàng, IBAN, số IMEI đều có chữ số kiểm tra.
Cách tính chữ số kiểm tra mã vạch EAN-13?
Lấy 12 chữ số đầu, nhân chữ số ở vị trí lẻ với 1 và vị trí chẵn với 3, cộng lại. Chữ số kiểm tra là số cần thêm để tổng chia hết cho 10. Ví dụ tổng 92 thì chữ số kiểm tra là 8.
Vì sao ISBN-10 có chữ X ở cuối?
Vì ISBN-10 tính chữ số kiểm tra bằng phép chia cho 11, nên đôi khi kết quả cần là 10. Để giữ mã đúng 10 ký tự, người ta viết X thay cho 10. ISBN-13 tính theo môđun 10 nên không có X.
Số căn cước 12 số có chữ số kiểm tra không?
Các văn bản công khai mô tả cấu trúc số định danh cá nhân (mã tỉnh, mã giới tính và thế kỷ, năm sinh, 6 số ngẫu nhiên) không nêu chữ số kiểm tra. Vì vậy không có cách tự kiểm số căn cước bằng phép tính như mã vạch hay số thẻ.
IBAN kiểm tra bằng cách nào?
Chuyển bốn ký tự đầu xuống cuối, đổi chữ cái thành số (A = 10 đến Z = 35), rồi chia cả dãy cho 97. Dư đúng 1 là IBAN hợp lệ. Hai chữ số kiểm tra theo môđun 97 bắt được mọi lỗi sai một ký tự và hầu như mọi lỗi đảo chỗ.