Mã QR là gì: nguyên lý hoạt động và mức sửa lỗi Reed-Solomon

Mã QR (QR Code) là một dạng mã vạch hai chiều, nghĩa là dữ liệu được lưu cả theo chiều ngang lẫn chiều dọc, nhờ đó chứa được nhiều dữ liệu hơn nhiều so với mã vạch một chiều cùng kích thước. Mã QR được Denso Wave phát minh năm 1994, ban đầu chỉ dùng để ghi nhãn linh kiện trong dây chuyền sản xuất ô tô, và giờ đây gần như xuất hiện ở mọi hóa đơn, vé xe và màn hình thanh toán.

Bài viết này giải thích cấu trúc bên trong mã QR, bốn mức sửa lỗi và những giới hạn thực tế khi thiết kế một mã QR.

Sơ đồ cấu trúc mã QR gồm vùng thông tin phiên bản, thông tin định dạng và các mẫu bắt buộc

Quét nhanh nhờ những mẫu cố định

Điểm độc đáo nhất của mã QR so với mã vạch thông thường là nó có hệ thống mẫu cố định giúp máy quét tự định vị và hiểu mặt trước, kể cả khi ảnh bị xoay hoặc lật ngược.

Ở ba góc có các mẫu định vị (finder pattern), mỗi mẫu gồm vòng ngoài 7×7 module đen, vòng trắng 5×5, lõi đen 3×3, với tỷ lệ sáng tối xen kẽ 1:1:3:1:1. Chính tỷ lệ này giúp phần mềm nhận ra mã ngay cả khi ảnh nhòe hay đổi góc. Quanh mẫu là dải tách rộng đúng 1 module màu trắng.

Hai mẫu định thời là các hàng và cột module sáng tối xen kẽ nằm trên vị trí thứ 6, luôn bắt đầu và kết thúc bằng module tối, giúp chuẩn hoá khoảng cách module. Từ phiên bản 2 trở lên có thêm mẫu căn chỉnh 5×5 đặt ở các vị trí định trước để chống méo khi ảnh được chụp ở góc nghiêng. Bốn mô đen cố định cạnh mẫu định vị dưới trái tạo thành dark module, và một vùng trống rộng tối thiểu 4 module bao quanh toàn bộ mã gọi là vùng lặng, đảm bảo nền tối thiểu để máy quét phân biệt mã với phần xung quanh.

Vị trí chính xác của từng mẫu được mô tả tại hướng dẫn về ma trận đặt mô điển QR của Thonky. Chi tiết từng mục cũng có trong trang QR code trên Wikipedia.

Ảnh minh hoạ các bước tạo mã QR từ nội dung văn bản đến bản in

Quy trình tạo và đọc một mã QR

Mỗi module đen hoặc trắng trong mã đại diện cho một bit. Toàn bộ quy trình tạo mã đi kể từ lúc bạn nhập một đoạn văn bản đến lúc có mã in ra gồm nhiều bước biến đổi:

  1. Chọn chế độ mã hoá — số, alphanumeric, byte hoặc kanji. Chế độ số nén chặt nhất, còn byte phổ quát nhất vì chứa được UTF-8.
  2. Chuyển thành chuỗi bit và ghi kèm 4 bit chỉ thị chế độ ở đầu.
  3. Thêm mã sửa lỗi Reed-Solomon, chia dữ liệu thành các khối rồi xen kẽ chúng vào nhau.
  4. Đặt chuỗi bit vào ma trận theo đường zigzag từ góc dưới phải đi lên.
  5. Áp dụng một trong 8 mẫu mask và chọn mẫu cho điểm phạt thấp nhất.
  6. Ghi thông tin định dạng và phiên bản vào các vùng riêng.

Chi tiết về bước chia khối và sinh mã sửa lỗi có bảng tra cụ thể theo từng cặp phiên bản và mức sửa lỗi tại bảng mã sửa lỗi Reed-Solomon của Thonky.

Bốn mức sửa lỗi và sự đánh đổi

Đây là quyết định thiết kế quan trọng nhất khi tạo mã QR. Mỗi mức sửa lỗi đánh đổi giữa khả năng chịu hỏng và sức chứa dữ liệu.

Mức Khôi phục Dung lượng tối đa (byte, bản 40) Dùng khi nào
L (Low) 7% 2.953 byte In trên màn hình sạch, nội dung ngắn
M (Medium) 15% 2.331 byte Lựa chọn phổ biến nhất, cân bằng hai yếu tố
Q (Quartile) 25% 1.663 byte In ấn phẩm, môi trường dễ bẩn hoặc xước
H (High) 30% 1.273 byte In trên bao bì, tem vận chuyển, điều kiện khắc nghiệt

Con số 7%, 15%, 25%, 30% là tên quy ước gắn với từng mức, được Denso Wave dùng để mô tả độ bền của mã. Phần cơ học đằng sau đã giải thích ở đoạn dưới. Có thể kiểm chứng bằng mã nhỏ nhất: phiên bản 1 ở mức L có tổng cộng 26 codeword gồm 19 codeword dữ liệu và 7 codeword sửa lỗi. Trang chính thức giải thích chi tiết cách tính này tại trang về sửa lỗi của Denso Wave.

Nguyên lý đằng sau là mã Reed-Solomon, một mã tuyến tính khối có khoảng cách tối thiểu bằng số mã sửa lỗi cộng một, nên có thể sửa được tối đa một nửa số mã sửa lỗi. Mã này hoạt động trên trường hữu hạn với 37 đa thức khác nhau, bậc từ 7 đến 68. Với ví dụ 26 codeword và 19 codeword dữ liệu, số lỗi sửa được tối đa là phần nguyên của 7 chia 2, tức 3 lỗi codeword. Nhờ vậy một mã QR còn có thể đọc được khi bị đè lên logo, dán lên cửa kính hay xếp chồng một phần lên mã khác.

Kích thước, dung lượng và giới hạn thực tế

Mã QR có 40 phiên bản. Số module mỗi cạnh bằng bốn lần phiên bản cộng mười bảy, nên phiên bản 1 là 21×21 module và phiên bản 40 là 177×177 module. Tổng dung lượng ở mức L của phiên bản 40 là 23.648 bit, tương đương 7.089 chữ số, 4.296 ký tự alphanumeric, 2.953 byte hoặc 1.817 chữ Hán. Bảng tra đầy đủ theo từng phiên bản và từng mức sửa lỗi nằm tại trang phiên bản 31 đến 40 của Denso Wave.

Phiên bản 7 trở lên có thêm vùng thông tin phiên bản gồm hai vùng 6×3 và 3×6. Vùng lặng bắt buộc rộng 4 module quanh mã cũng nên được tính vào khoảng trống thiết kế, vì bỏ sót vùng này là nguyên nhân phổ biến khiến mã không quét được.

Bốn điều cần nhớ khi thiết kế mã QR:

  • Cỡ module tối thiểu. Khi in nhỏ, module dày hơn 0,5mm thì nhiều máy quét không đọc được. Phải thử in thật, không chỉ xem trên màn hình.
  • Tương phản màu. Nền sáng và module tối là an toàn nhất. In mã trắng trên nền đen sẽ cần ứng dụng đảo màu riêng, còn mã màu đỏ, xanh dương hoặc tím thường không thể quét được.
  • Độ tương phản không đồng đều. Ánh sáng phản chiếu vàng, mặt kính cong hay ảnh chụp màn hình đều làm giảm độ tin cậy khi quét.
  • QR không phải mã chống sao chép. Ai cũng lưu được một bản ảnh mã. Muốn chống in lại thì phải kèm ký số, không nên đặt niềm tin vào hình dạng mã.

Ngoài mã QR tiêu chuẩn còn có Micro QR với chỉ 4 phiên bản, nhỏ nhất là 11×11 module, dung lượng nhỏ hơn đáng kể và dùng để tiết kiệm không gian trên bao bì nhỏ. Lịch sử phát minh và ứng dụng đầu tiên trong ngành ô tô được ghi lại tại trang lịch sử chính thức của Denso Wave.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Sơ đồ so sánh kích thước các định dạng thẻ SIM: mini-SIM 2FF, micro-SIM 3FF, nano-SIM 4FF, eSIM và eUICC dạng MFF2

eSIM là gì? SIM điện tử và cách chuyển mạng không cần thẻ

eSIM (viết tắt của embedded SIM) là phiên bản SIM điện tử được gắn dẫn trực tiếp vào bo mạch chủ của thiết bị, thay vì là thẻ nhúng tháo…

Xem thêm
Đồ thị phản xạ phụ thuộc góc của gương đa lớp EUV cho thấy hiệu suất suy giảm khi lệch khỏi vùng độ mở số NA 0,33

Công nghệ in mạch EUV là gì? Vì sao chip 2nm cần ánh sáng 13,5nm

Công nghệ in mạch EUV: Ánh sáng 13,5nm tạo ra chip 2nm Công nghệ in mạch EUV (Extreme Ultraviolet Lithography) là công nghệ khắc mạch bán dẫn sử dụng ánh…

Xem thêm
Hình minh họa chính thức của Apple cho thông báo cập nhật quyền Full Disk Access trên macOS

Apple siết Full Disk Access trên macOS trước rủi ro từ trợ lý AI

Apple siết Full Disk Access trên macOS trước rủi ro từ trợ lý AI Ngày 2/10/2026, Apple đăng thông báo chính thức trên Developer News cho biết hãng sẽ bổ…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất