Cách tạo mã QR từng bước
(nayuki.io)Quy trình tạo mã QR từng bước
Ứng dụng demo JavaScript này trực quan hóa chi tiết quá trình một chuỗi văn bản được mã hóa thành ký hiệu mã vạch QR. Nội dung của trang này giải thích và làm rõ cách một thư viện tạo mã QR hoạt động ở bên trong.
Đầu vào của người dùng
- Chuỗi văn bản: "Hello world"
- Mức sửa lỗi: thấp, trung bình, tứ phân vị, cao
- Buộc phiên bản tối thiểu: từ 1 đến 40
- Buộc mẫu mask: tự động (-1) hoặc thủ công (0 đến 7)
Đầu ra mã QR
Quy trình từng bước
0. Phân tích ký tự Unicode
- Số lượng code point của chuỗi văn bản đầu vào: 17
- Chi tiết của từng ký tự:
- Chỉ số, ký tự, code point Unicode, khả năng mã hóa ở chế độ số, chế độ chữ cái, chế độ byte, chế độ Kanji
1. Tạo phân đoạn dữ liệu
- Chuyển từng ký tự thành bit
- Ở chế độ byte, ký tự tạo ra 8, 16, 24, 32 bit
- Phân đoạn đơn được tạo ra:
- Chế độ: byte
- Số lượng: 17 byte
- Dữ liệu: độ dài 136 bit
2. Khớp với số phiên bản
- Tổng độ dài bit cần thiết để biểu diễn danh sách phân đoạn
- Dung lượng codeword dữ liệu của mã QR theo phiên bản và mức sửa lỗi
3. Nối phân đoạn, thêm padding, tạo codeword
- Kết hợp các chuỗi bit khác nhau
- Chế độ phân đoạn, số lượng ký tự, dữ liệu, terminator, bit padding, byte padding
4. Chia khối, thêm ECC, xen kẽ
- Thống kê cho mọi khối
- Chia codeword dữ liệu thành khối ngắn và khối dài, sau đó tính toán và thêm codeword ECC
5. Vẽ các mẫu cố định
- Vẽ mẫu timing ngang và dọc
- Vẽ mẫu finder ở ba góc
- Vẽ lưới mẫu căn chỉnh
- Vẽ bit định dạng tạm thời
- Vẽ khối thông tin phiên bản
6. Vẽ codeword và phần dư
- Tính phép quét zigzag để đi qua mọi module chưa được điền
- Vẽ các module dữ liệu/ECC theo thứ tự quét zigzag và giá trị bit của codeword
7. Thử áp dụng từng mask
- Áp dụng mẫu mask
- Áp dụng mask XOR cho các module dữ liệu, ECC và phần dư
- Vẽ các bit định dạng thực tế
8. Tìm các mẫu penalty
- Các dải module ngang và dọc có cùng màu
- Các ô module 2×2 cùng màu
- Các mẫu finder theo chiều ngang và dọc
- Cân bằng giữa module tối/sáng
9. Tính điểm penalty, chọn mask tối ưu
- Cách tính điểm penalty
- Tổng điểm penalty thấp nhất: mẫu mask 3
Thông tin bổ sung
- Cung cấp liên kết đến Wikipedia và các tài liệu khác về thiết kế mã QR
Mã nguồn TypeScript và mã JavaScript đã biên dịch của ứng dụng web này có thể được xem.
1 bình luận
Ý kiến trên Hacker News
Thật tiếc là trong các bài giải thích trực tuyến về mã QR, phần tính toán mã sửa lỗi Reed-Solomon thường bị bỏ qua
Có video của Veritasium về mã QR mang tên "I used to hate QR codes. But they're actually genius"
Phản hồi mà tác giả nhận được khá thú vị
Muốn xem một bài giải thích tương tự về bộ giải mã QR
Đã từng triển khai mã QR bằng Rust
Gắn năm vào tiêu đề bài viết là một thói quen tốt (trong trường hợp này là năm 2018)
Việc tìm hiểu cách hoạt động của mã QR đã nằm trong danh sách việc cần làm từ lâu, và đây là một bài nhập môn tốt
Muốn tạo mã QR thật nhanh nhưng gặp khó vì các trang đầy quảng cáo và các trang bắt "phải đăng ký để dùng"
Có thể thêm nhiều tùy chọn hơn, nhưng nghĩ rằng phần lớn người dùng sẽ không cần
Sau khi biết cách mã QR hoạt động, giờ còn có thể dùng nó ngay trong truy vấn SQL