Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh công nghệ số phát triển, nhu cầu xác thực, kiểm tra và truy xuất thông tin của cá nhân hoặc sản phẩm đòi hỏi sự nhanh chóng, chính xác và tiện lợi. Mã vạch truyền thống một chiều (1D barcode) bộc lộ nhiều hạn chế về dung lượng lưu trữ (tối đa khoảng 20 ký tự số) và góc quét hẹp. Sự ra đời của mã phản hồi nhanh (Quick Response code - QR Code) với cấu trúc ma trận hai chiều (2D) đã giải quyết được các giới hạn này, cho phép lưu trữ hàng ngàn ký tự và hỗ trợ quét đa hướng từ bất kỳ góc độ nào. Bên cạnh lĩnh vực tiếp thị và quảng cáo, mã QR mở ra tiềm năng lớn cho công tác quản lý nhân sự, kiểm soát điểm danh và xác thực sự kiện tại các cơ quan, doanh nghiệp và trường học.

Khóa luận tốt nghiệp "Tìm hiểu QRcode và ứng dụng cho bài toán check-in tự động" do sinh viên Phạm Văn Hoàng Hà thực hiện dưới sự hướng dẫn của TS. Đỗ Văn Chiểu tại Trường Đại học Dân lập Hải Phòng (hoàn thành tháng 01/2019) tập trung vào việc nghiên cứu nguyên lý sinh mã QR và ứng dụng vào bài toán quản lý ghi nhận thông tin ra vào tự động.

Nhiệm vụ nghiên cứu cụ thể của đề tài bao gồm:

  1. Nghiên cứu tổng quan về mã QR, cấu trúc dữ liệu, nguyên lý phân loại mã QR tĩnh và mã QR động.
  2. Tìm hiểu chi tiết thuật toán mã hóa dữ liệu nhị phân, thuật toán sinh mã sửa lỗi Reed-Solomon và quy tắc áp dụng mặt nạ (mask pattern) trong chuẩn QR Code.
  3. Nghiên cứu nền tảng phát triển ứng dụng web bao gồm kiến trúc World Wide Web, ngôn ngữ HTML, PHP và hệ quản trị cơ sở dữ liệu quan hệ MySQL.
  4. Phân tích, thiết kế hệ thống phần mềm quản lý check-in tự động (xây dựng biểu đồ ngữ cảnh, biểu đồ phân rã chức năng, biểu đồ luồng dữ liệu, mô hình thực thể liên kết).
  5. Hiện thực hóa ứng dụng web thử nghiệm có khả năng tạo mã QR từ thông tin người dùng và xử lý ghi nhận lượt check-in kèm thời gian thực tế.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Cấu trúc mã ma trận 2D QR Code, thuật toán sinh chuỗi nhị phân, thuật toán sửa lỗi Reed-Solomon; quy trình nghiệp vụ tiếp nhận thông tin, khởi tạo mã và kiểm soát check-in.
  • Phạm vi nghiên cứu: Ứng dụng web cục bộ xây dựng trên ngôn ngữ PHP và cơ sở dữ liệu MySQL, sử dụng thư viện qrlib.php để sinh mã ảnh định dạng PNG; dữ liệu định danh người dùng dựa trên địa chỉ email; thời gian triển khai nghiên cứu từ ngày 15/10/2018 đến ngày 07/01/2019.

Cơ sở lý thuyết và phương pháp

Khóa luận kết hợp giữa nghiên cứu lý thuyết toán học - kỹ thuật mã hóa ma trận và phương pháp phân tích thiết kế hệ thống thông tin theo hướng cấu trúc:

1. Cơ sở lý thuyết về mã QR và sửa lỗi

  • Khái niệm và đặc tính QR Code: Mã vạch ma trận 2D do Denso Wave phát triển, hỗ trợ các chế độ mã hóa dữ liệu: số (numeric), chữ số - ký tự (alphanumeric), nhị phân 8-bit (byte) và ký tự Kanji (Nhật ngữ).
  • Phân loại mã QR: Mã QR tĩnh (lưu trực tiếp chuỗi văn bản hoặc URL cố định) và mã QR động (chứa liên kết dẫn đến máy chủ trung gian, cho phép cập nhật đích đến mà không làm thay đổi hình ảnh mã).
  • Thuật toán sinh mã và sửa lỗi: Sử dụng nguyên lý trường hữu hạn Galois GF(256) và bộ mã sửa lỗi Reed-Solomon để tạo các đa thức sửa lỗi. QR Code hỗ trợ 4 cấp độ phục hồi dữ liệu:
    • Mức L (Low): Phục hồi khoảng 7% dữ liệu bị hỏng.
    • Mức M (Medium): Phục hồi khoảng 15% dữ liệu bị hỏng.
    • Mức Q (Quartile): Phục hồi khoảng 25% dữ liệu bị hỏng.
    • Mức H (High): Phục hồi khoảng 30% dữ liệu bị hỏng.
  • Mẫu mặt nạ (Mask pattern): Tiêu chuẩn QR Code định nghĩa 8 mẫu mặt nạ để đảo bit nhằm tránh việc tập trung quá nhiều điểm ảnh cùng màu gây khó khăn cho đầu đọc quang học.

2. Nền tảng công nghệ web

  • HTML & Giao diện: Mô hình tài liệu siêu văn bản, các thẻ cấu trúc (<head>, <body>, <table>, <form>, <input>, <select>, <textarea>).
  • Ngôn ngữ PHP: Ngôn ngữ kịch bản phía máy chủ (server-side), cơ chế quản lý phiên làm việc qua Cookie và Session, xử lý biểu mẫu qua phương thức GET và POST.
  • Cơ sở dữ liệu MySQL: Hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở, các câu lệnh thao tác dữ liệu (SELECT, INSERT, UPDATE, DELETE), các hàm xử lý chuỗi (ASCII, CHAR, UPPER, LOWER, LEN, LTRIM, LEFT, RIGHT, INSTR), hàm tính toán thống kê (AVG, MIN, MAX, COUNT, SUM) và hàm thời gian hệ thống (CURDATE, CURTIME).

3. Phương pháp phân tích thiết kế hệ thống

Tác giả sử dụng phương pháp phân tích cấu trúc truyền thống:

  • Xây dựng Biểu đồ ngữ cảnh hệ thống (Context Diagram).
  • Xây dựng Biểu đồ phân rã chức năng (Business Function Diagram - BFD).
  • Lập Ma trận thực thể - chức năng (CRUD matrix).
  • Xây dựng Biểu đồ luồng dữ liệu (Data Flow Diagram - DFD) chi tiết cho từng tác vụ.
  • Thiết kế mô hình liên kết thực thể (Entity-Relationship Diagram - ERD) và chuẩn hóa lược đồ quan hệ.

Thiết kế và triển khai hệ thống

Hệ thống được thiết kế dưới dạng ứng dụng web phục vụ việc quản lý thành viên và tự động hóa thao tác ghi nhận thông tin điểm danh/check-in.

1. Kiến trúc chức năng hệ thống

Hệ thống gồm 3 chức năng chính:

  • Khởi tạo thông tin thành viên: Người quản trị nhập các trường dữ liệu gồm Họ tên, Số điện thoại và Email vào cơ sở dữ liệu.
  • Khởi tạo mã QR: Hệ thống sử dụng địa chỉ email của thành viên làm chuỗi đầu vào, tạo ảnh mã QR tương ứng và lưu trữ tên tệp mã định danh vào bảng người dùng.
  • Check-in tự động: Thành viên cung cấp mã QR (trên điện thoại hoặc bản in) để hệ thống nhận diện; khi khớp dữ liệu, hệ thống tự động ghi nhận mã định danh, email và thời gian thực hiện vào nhật ký dịch vụ.
Thực thể dữ liệu / Chức năng nghiệp vụ Danh sách thành viên Danh sách mã QR Danh sách check-in
1. Khởi tạo thông tin thành viên Create (C) - -
2. Khởi tạo mã QR Read (R) Create (C) -
3. Check-in tự động Read (R) Read (R) Create (C)

2. Thiết kế cơ sở dữ liệu

Hệ thống thiết kế 2 bảng dữ liệu quan hệ chính:

Bảng 1: Bảng User (Lưu trữ thông tin thành viên và mã QR)

STT Tên trường Kiểu dữ liệu Ghi chú
1 id INT Khóa chính (Primary Key), tự tăng
2 hoten VARCHAR Họ và tên thành viên
3 sdt CHAR Số điện thoại liên hệ
4 email VARCHAR Địa chỉ email (dùng để sinh mã QR)
5 maqr VARCHAR Đường dẫn/tên tệp ảnh mã QR

Bảng 2: Bảng DichVu (Lưu vết lịch sử check-in)

STT Tên trường Kiểu dữ liệu Ghi chú
1 dichvu_id INT Khóa chính (Primary Key), tự tăng
2 user_email VARCHAR Email của thành viên check-in
3 user_id INT Khóa ngoại (Foreign Key) tham chiếu tới User(id)
4 ngaysudung TIMESTAMP Thời gian hệ thống ghi nhận check-in

3. Cấu hình triển khai và thực nghiệm

  • Môi trường phần cứng thử nghiệm: Máy tính xách tay Asus X550LD, bộ vi xử lý Intel Core i5, bộ nhớ trong RAM 8GB.
  • Môi trường phần mềm: Hệ điều hành Windows 10 64-bit, máy chủ dịch vụ web Apache, hệ quản trị cơ sở dữ liệu MySQL.
  • Cấu hình sinh mã: Sử dụng thư viện qrlib.php, thư mục chứa tệp tạm thời $PNG_WEB_DIR = 'temp/', mức độ sửa lỗi Reed-Solomon $errorCorrectionLevel = 'L', kích thước điểm ma trận $matrixPointSize = 4. Tệp ảnh mã sinh ra có định dạng .png với tên tệp lấy theo id của thành viên.
// Đoạn mã cấu hình sinh mã QR trong đồ án
$errorCorrectionLevel = 'L';
$matrixPointSize = 4;
$filename = $PNG_WEB_DIR . $id . '.png';
$codeContents = $email;
QRcode::png($codeContents, $filename, $errorCorrectionLevel, $matrixPointSize, 2);

Nội dung chính theo từng chương

CHƯƠNG 1: QRCODE VÀ TÌM HIỂU VỀ LẬP TRÌNH WEB TRÊN PHP/SQL

Chương này tập trung trình bày tổng quan lý thuyết về mã QR, quy trình mã hóa và các công nghệ phát triển web cơ bản:

  • Nguyên lý QR Code: So sánh sự vượt trội của mã QR 2D so với mã vạch 1D về dung lượng lưu trữ và khả năng đọc đa chiều. Phân biệt đặc tính kỹ thuật giữa mã QR tĩnh và mã QR động.
  • Chi tiết các bước sinh chuỗi nhị phân (Ví dụ mã hóa chuỗi HELLO WORLD trên QR Version 1 - Mức sửa lỗi Q):
    1. Bộ chỉ chế độ (Mode Indicator): Chuỗi 4 bit 0010 (chế độ Alphanumeric).
    2. Mã hóa độ dài dữ liệu: Độ dài chuỗi là 11 ký tự, biểu diễn bằng 9 bit là 000001011.
    3. Mã hóa nội dung ký tự: Chia chuỗi thành các cặp ký tự (HE, LL, O , WO, RL, D). Giá trị mã hóa bằng: $(\text{ASCII ký tự 1} \times 45) + \text{ASCII ký tự 2}$, sau đó chuyển thành chuỗi nhị phân 11 bit (ký tự lẻ cuối cùng chuyển thành 6 bit).
    4. Bổ sung bit kết thúc (Terminator): Thêm 4 bit 0000 để đạt độ dài theo yêu cầu phiên bản.
    5. Định dạng chuỗi 8-bit: Thêm các số 0 để chuỗi chia hết cho 8 bit.
    6. Thêm các byte đệm (Pad bytes): Thêm xen kẽ các byte 11101100 (giá trị thập phân 236) và 00010001 (giá trị thập phân 17) cho đến khi đủ số lượng từ dữ liệu yêu cầu (đạt 13 khối dữ liệu).
  • Sinh mã sửa lỗi Reed-Solomon: Xây dựng thông điệp đa thức bậc 25 từ 13 khối dữ liệu ($32x^{25} + 91x^{24} + 11x^{23} + \dots + 236x^{13}$), thực hiện phép chia đa thức trên trường Galois GF(256) với bộ tạo đa thức để tạo ra 13 byte sửa lỗi (168 72 22 82 217 54 156 0 46 15 180 122 16).
  • Bố cục ma trận mã QR: Mô tả các mẫu định vị vị trí (Finder Pattern ở 3 góc), dải đồng bộ thời gian (Timing Pattern), thông tin định dạng (Format Information gồm 15 bit hiển thị 2 lần), thông tin phiên bản (Version Information cho Version 7 trở lên) và thuật toán xếp bit theo dạng zíc-zắc hình con rắn (snake-like path).
  • Lý thuyết phát triển web: Giới thiệu tổng quan về WWW, cấu trúc các thẻ HTML cơ bản, cú pháp PHP, cách quản lý Cookie và Session, kết nối cơ sở dữ liệu MySQL và các nhóm lệnh truy vấn SQL.

CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG

Chương này thực hiện mô hình hóa quy trình nghiệp vụ và cấu trúc dữ liệu của ứng dụng check-in tự động:

  • Phát biểu bài toán: Mô tả quy trình quản trị viên thu thập thông tin thành viên (Họ tên, SĐT, Email), hệ thống tự sinh mã QR gắn với email thành viên. Khi check-in, thành viên quét mã tại trạm tiếp nhận để hệ thống kiểm tra tính hợp lệ và tự động ghi vết thời gian thực.
  • Mô hình hóa chức năng và luồng dữ liệu:
    • Xây dựng Biểu đồ ngữ cảnh thể hiện tương tác giữa 2 tác nhân chính (Người quản trị, Thành viên) với Hệ thống.
    • Phân rã hệ thống thành 3 chức năng độc lập: Khởi tạo thông tin, Khởi tạo mã QR và Check-in tự động.
    • Biểu diễn ma trận phân công CRUD giữa các chức năng và các tập dữ liệu.
    • Thiết lập biểu đồ luồng dữ liệu (DFD) chi tiết cho tác vụ thêm mới thành viên, tác vụ tạo ảnh mã QR và tác vụ xử lý check-in.
  • Mô hình dữ liệu: Xây dựng biểu đồ liên kết thực thể (ERD) với mối quan hệ 1-1 giữa Thành viên và Mã QR, mối quan hệ 1-N giữa Thành viên và Lịch sử sử dụng dịch vụ check-in. Chi tiết hóa thành 2 bảng quan hệ vật lý User và DichVu.

CHƯƠNG 3: THUẬT TOÁN, ỨNG DỤNG VÀ THỰC NGHIỆM

Chương này mô tả việc cài đặt phần mềm và kiểm thử các giao diện chức năng:

  • Hiện thực hóa thuật toán: Trình bày mã nguồn kết nối thư viện qrlib.php trong môi trường PHP để tự động hóa quy trình sinh mã ma trận phức tạp đã nghiên cứu ở Chương 1.
  • Môi trường thực nghiệm: Thiết lập máy chủ thử nghiệm trên phần cứng máy tính Asus X550LD (RAM 8GB, CPU Core i5, Windows 10 64-bit).
  • Giao diện hệ thống: Hiện thực hóa và kiểm thử 6 màn hình chức năng chính:
    1. Giao diện trang chủ điều hướng hệ thống.
    2. Màn hình quản lý danh sách thành viên.
    3. Màn hình hiển thị chi tiết thành viên kèm ảnh mã QR được tạo.
    4. Màn hình chỉnh sửa thông tin thành viên.
    5. Màn hình thêm mới thành viên.
    6. Màn hình thực thi chức năng quét mã check-in tự động và hiển thị nhật ký thời gian.

Kết quả và đóng góp

1. Kết quả đạt được

  • Hệ thống hóa đầy đủ cơ sở toán học và kỹ thuật của chuẩn mã QR Code: từ cơ chế mã hóa bit Alphanumeric, kỹ thuật chèn byte đệm, thuật toán chia đa thức sửa lỗi Reed-Solomon trên trường Galois GF(256) cho đến quy tắc định vị ma trận 21x21 (Version 1).
  • Xây dựng hoàn chỉnh ứng dụng web thực nghiệm bằng PHP/MySQL, tích hợp thành công thư viện sinh mã qrlib.php.
  • Tự động hóa quy trình check-in: Chuyển đổi dữ liệu email thành viên thành mã QR dạng ảnh PNG, nhận diện mã và lưu trữ tự động thời gian điểm danh (timestamp) vào cơ sở dữ liệu.

2. Đóng góp về mặt giải pháp

  • Đề xuất mô hình ứng dụng mã QR cho công tác quản lý chuyên cần và điểm danh tại cơ quan, trường học thay thế cho các phương thức ghi chép sổ sách truyền thống.
  • Cung cấp tài liệu chi tiết từng bước tính toán lý thuyết thuật toán sinh mã QR, giúp đơn giản hóa quá trình tiếp cận chuẩn công nghệ mã vạch hai chiều.

Hạn chế và hướng nghiên cứu tiếp

Dựa trên nội dung và phạm vi triển khai của đồ án, một số hạn chế và hướng phát triển được xác định:

  • Hạn chế:
    • Hệ thống mới được thử nghiệm trên môi trường máy chủ cục bộ đơn lẻ (Localhost trên Windows 10), chưa triển khai thực tế trên môi trường mạng Internet diện rộng.
    • Cơ chế phân phối mã QR cho người dùng còn phụ thuộc vào thao tác thủ công của quản trị viên, chưa tích hợp module tự động gửi mã qua email hoặc tin nhắn SMS.
    • Sử dụng chuỗi email thuần túy làm nội dung mã QR, chưa áp dụng các giải pháp mã hóa bảo mật hoặc cơ chế mã QR động có gắn mã xác thực dùng một lần (OTP/Token) để chống sao chép, chia sẻ mã điểm danh hộ.
  • Hướng nghiên cứu tiếp:
    • Tích hợp giao diện quét mã trực tiếp thông qua Camera/Webcam trên trình duyệt web hoặc thiết bị di động.
    • Nâng cấp tính năng tự động gửi mã QR qua thư điện tử khi tạo mới thành viên.
    • Xây dựng cơ chế xác thực nâng cao nhằm ngăn chặn tình trạng gian lận khi check-in.

Giá trị tham khảo

Tài liệu khóa luận có giá trị tham khảo hữu ích cho:

  • Sinh viên ngành Công nghệ thông tin, Hệ thống thông tin: Tham khảo phương pháp phân tích thiết kế hệ thống có cấu trúc (Context, BFD, DFD, ERD, CRUD matrix) cho một bài toán quản lý quy mô vừa và nhỏ.
  • Lập trình viên web PHP/MySQL: Tham khảo phương thức tích hợp thư viện mã nguồn mở (qrlib.php) để tạo mã QR tự động và cách tổ chức bảng cơ sở dữ liệu ghi nhận nhật ký check-in thời gian thực.
  • Người nghiên cứu thuật toán nén và mã hóa dữ liệu: Chương 1 của đồ án là tài liệu thuyết minh chi tiết về từng bước chuyển đổi bit, quy tắc nhân ma trận đa thức Galois và cấu trúc hình học của chuẩn QR Code.

Câu hỏi thường gặp

1. Chuỗi dữ liệu nào của người dùng được sử dụng để sinh mã QR và định dạng tệp ảnh tạo ra là gì?

Hệ thống sử dụng địa chỉ email của thành viên để gán vào biến nội dung $codeContents. Ảnh mã QR sau khi khởi tạo được lưu vào thư mục temp/ dưới định dạng tệp .png, với tên tệp được đặt theo mã định danh id của thành viên trong cơ sở dữ liệu.

2. Quá trình tạo chuỗi nhị phân cho mã QR Version 1 (chuỗi HELLO WORLD) gồm những bước nào?

Quá trình này gồm 6 bước: (1) Khởi tạo 4-bit Mode Indicator (0010); (2) Mã hóa độ dài dữ liệu 11 ký tự thành 9-bit (000001011); (3) Mã hóa từng cặp ký tự theo công thức $(\text{ASCII}_1 \times 45) + \text{ASCII}_2$ thành chuỗi 11-bit; (4) Thêm 4 bit 0000 kết thúc để đủ 59 bit dữ liệu; (5) Bổ sung bit 0 để chia hết cho 8-bit; (6) Thêm xen kẽ các byte đệm 11101100 và 00010001 để đạt đủ 13 khối dữ liệu (104 bit).

3. Cơ sở dữ liệu của hệ thống gồm những bảng nào và mối quan hệ giữa chúng là gì?

Cơ sở dữ liệu gồm 2 bảng:

  • Bảng User lưu thông tin người dùng (id, hoten, sdt, email, maqr), trong đó id là khóa chính.
  • Bảng DichVu lưu thông tin check-in (dichvu_id, user_email, user_id, ngaysudung), trong đó dichvu_id là khóa chính và user_id là khóa ngoại liên kết với User(id). Mối quan hệ giữa User và DichVu là quan hệ một - nhiều (1-N).

4. Trong chương trình thực nghiệm, mức độ sửa lỗi Reed-Solomon nào được sử dụng và có ý nghĩa gì?

Chương trình thực nghiệm thiết lập biến $errorCorrectionLevel = 'L'. Đây là mức sửa lỗi thấp nhất (Low) trong thuật toán Reed-Solomon của chuẩn QR Code, cho phép phục hồi khoảng 7% lượng dữ liệu trong trường hợp mã QR bị mờ, rách hoặc che khuất một phần.

5. Hệ thống phần mềm được thử nghiệm trên cấu hình phần cứng và hệ điều hành nào?

Hệ thống được thử nghiệm trên máy tính xách tay Asus X550LD trang bị vi xử lý Intel Core i5, bộ nhớ RAM 8GB và chạy trên hệ điều hành Windows 10 phiên bản 64-bit.


Kết luận

Đồ án tốt nghiệp của tác giả Phạm Văn Hoàng Hà đã làm rõ cơ sở toán học của thuật toán sinh mã QR và cơ chế sửa lỗi Reed-Solomon, đồng thời phân tích và xây dựng thành công ứng dụng web check-in tự động trên nền tảng PHP/MySQL. Hệ thống giải quyết hiệu quả bài toán quản lý danh sách thành viên, tự động sinh mã định danh dạng ảnh và lưu vết chính xác thời gian thực hiện điểm danh. Mặc dù còn hạn chế về môi trường thử nghiệm đơn máy và bảo mật mã tĩnh, công trình là tài liệu kỹ thuật có cấu trúc rõ ràng, cung cấp cơ sở tham khảo thiết thực cho các nghiên cứu ứng dụng mã vạch hai chiều trong quản lý thông tin.