Giới thiệu dự án
Trong kỷ nguyên chuyển đổi số và tự động hóa quy trình quản trị, việc định danh và kiểm soát truy cập thủ công đang bộc lộ nhiều hạn chế nghiêm trọng. Theo các khảo sát thực tế trong quản lý sự kiện và giáo dục, phương thức điểm danh truyền thống bằng giấy hoặc đối soát bảng tính tiêu tốn trung bình từ 15 đến 30 giây cho mỗi lượt người, tỷ lệ sai sót ghi nhận dữ liệu dao động từ 5% đến 8%, đồng thời gây tắc nghẽn cục bộ tại các điểm kiểm soát. Sự ra đời của mã ma trận hai chiều (2D Barcode) — tiêu biểu là chuẩn QR Code (Quick Response Code) — đã mở ra giải pháp tối ưu cho bài toán nhận diện thời gian thực nhờ khả năng lưu trữ thông tin vượt trội và tốc độ phản hồi tính bằng mili-giây.
Đồ á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 (Khoa Công nghệ Thông tin, Trường Đại học Dân Lập Hải Phòng) tập trung giải quyết bài toán tự động hóa quy trình điểm danh/check-in. Đề tài xây dựng một hệ sinh thái web ứng dụng hoàn chỉnh kết hợp giải thuật mã hóa/giải mã QR Code chuẩn ISO/IEC 18004 với hệ thống quản trị cơ sở dữ liệu quan hệ, số hóa hoàn toàn vòng đời điểm danh của người dùng.
+------------------+ +-------------------+ +--------------------+
| Quản trị viên | ----> | Nhập thông tin | ----> | Sinh mã QR tự động|
| (Administrator) | | (Họ tên, Email) | | (qrlib.php Engine)|
+------------------+ +-------------------+ +--------------------+
|
v
+------------------+ +-------------------+ +--------------------+
| CSDL Quan hệ | <---- | Xử lý Check-in | <---- | Quét mã tại trạm |
| (MySQL Storage) | | (Ghi nhận log) | | (Camera / Scanner) |
+------------------+ +-------------------+ +--------------------+
Mục tiêu dự án
- Nghiên cứu cấu trúc ma trận và giải thuật toán học của QR Code: Phân tích chi tiết chu trình chuyển đổi dữ liệu từ chuỗi nhị phân, quy tắc đệm bit (bit padding), cơ chế chia đa thức Galois Field $GF(2^8)$ trong thuật toán sửa lỗi Reed-Solomon, và 8 mẫu mặt nạ (mask patterns).
- Thiết kế và xây dựng cơ sở dữ liệu quan hệ: Xây dựng hệ thống quản lý định danh người dùng và nhật ký dịch vụ bằng MySQL, đảm bảo toàn vẹn dữ liệu và tối ưu hóa thời gian truy vấn.
- Phát triển hệ thống Web check-in tự động: Lập trình ứng dụng Web tương tác trên nền tảng PHP và Apache Server, tích hợp thư viện xử lý đồ họa
phpqrcode để sinh mã tự động từ định danh người dùng (Email/ID).
- Đánh giá thực nghiệm hiệu năng: Kiểm thử quy trình quét mã, xác thực thông tin và ghi vết thời gian thực (timestamp) trên môi trường phần cứng thực tế.
Phương pháp tiếp cận và phạm vi
- Phương pháp tiếp cận: Ứng dụng mô hình Client-Server tiêu chuẩn kết hợp cơ chế Server-Side Rendering của PHP. Định danh email của người dùng được chuẩn hóa làm chuỗi đầu vào (Input String) để sinh mã ma trận tĩnh định dạng PNG.
- Kết quả kỳ vọng: Rút ngắn thời gian xác thực xuống dưới 1 giây/người dùng; triệt tiêu hoàn toàn nhu cầu in ấn văn bản giấy; loại bỏ sai sót nhập liệu thủ công.
- Phạm vi & Giới hạn: Hệ thống tập trung vào bài toán điểm danh nội bộ cho lớp học, hội nghị hoặc doanh nghiệp; hoạt động trên nền tảng Web thông qua mạng LAN/Internet; giao diện quét mã tích hợp trực tiếp qua camera máy trạm hoặc máy quét chuyên dụng.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi xây dựng hệ thống, các giải pháp nhận diện và điểm danh phổ biến trên thị trường được phân tích chi tiết nhằm xác định khoảng trống công nghệ và tối ưu hóa chi phí triển khai:
| Tiêu chí so sánh |
Danh sách giấy thủ công |
Mã vạch 1D (Code 128 / EAN) |
Thẻ từ / RFID |
Hệ thống QR Code (Giải pháp đề xuất) |
| Dung lượng lưu trữ |
Giới hạn trên giấy in |
~20 ký tự số/chữ |
Vài KB (bộ nhớ chip) |
Lên tới 7.089 số / 4.296 chữ số |
| Khả năng phục hồi lỗi |
0% (rách/mất là hỏng) |
Rất thấp (< 2%) |
Trung bình |
Lên tới 30% (Reed-Solomon Level H) |
| Góc đọc và quét |
Thủ công bằng mắt |
Đơn hướng (ngang cố định) |
Quét chạm/không chạm |
360 độ đa hướng, 2 chiều ma trận |
| Chi phí thiết bị |
Thấp (giấy, bút) |
Trung bình (máy quét laser) |
Cao (đầu đọc RFID + phôi thẻ) |
Cực thấp (tận dụng camera điện thoại/webcam) |
| Tính linh hoạt dữ liệu |
Không có |
Cố định |
Phải lập trình lại thẻ |
Dễ dàng sinh động, gửi qua email/SMS |
Phân loại yêu cầu theo mô hình MoSCoW
- Must Have (Bắt buộc phải có): Phân hệ CRUD quản lý danh sách thành viên; module sinh ảnh QR tự động dựa trên email; module giải mã quét mã và ghi nhận timestamp check-in vào CSDL.
- Should Have (Nên có): Cơ chế kiểm tra trùng lặp lượt quét; phân trang danh sách người dùng; thông báo trạng thái check-in trực quan trên UI.
- Could Have (Có thể có): Xuất báo cáo điểm danh ra định dạng Excel/PDF; gửi mã QR tự động qua giao thức SMTP.
- Won't Have (Chưa thực hiện ở phiên bản này): Nhận diện khuôn mặt sinh trắc học kết hợp; định vị GPS chống gian lận từ xa.
Thiết kế hệ thống
Kiến trúc hệ thống được xây dựng theo mô hình 3 tầng (3-Tier Architecture) phân tách rõ ràng giữa giao diện hiển thị, tầng logic xử lý nghiệp vụ và tầng lưu trữ dữ liệu.
+-------------------------------------------------------------------------+
| PRESENTATION TIER (CLIENT) |
| HTML5 Form / CSS Grid / JavaScript Camera Scanner Interface (Web Browser) |
+-------------------------------------------------------------------------+
| HTTP / HTTPS (GET/POST)
v
+-------------------------------------------------------------------------+
| APPLICATION TIER (WEB SERVER) |
| Apache HTTP Server 2.4 + PHP 7.x Script Engine |
| +---------------------+ +--------------------+ +------------------+ |
| | User Management API | | QR Generator Lib | | Check-in Service | |
| | (CRUD Handlers) | | (qrlib.php Engine) | | (Session/Cookie) | |
| +---------------------+ +--------------------+ +------------------+ |
+-------------------------------------------------------------------------+
| MySQL Native Driver (mysqli)
v
+-------------------------------------------------------------------------+
| DATA TIER (STORAGE) |
| MySQL Relational Database 5.7 |
| Tables: `user` (Members) <---> `dichvu` (Check-in Logs) |
+-------------------------------------------------------------------------+
Thiết kế cơ sở dữ liệu quan hệ (Relational Database Schema)
Hệ thống sử dụng hai bảng thực thể cốt lõi với cấu trúc chuẩn hóa (3NF):
-- Bảng lưu trữ thông tin thành viên
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`hoten` VARCHAR(100) NOT NULL,
`sdt` CHAR(15) NOT NULL,
`email` VARCHAR(100) NOT NULL UNIQUE,
`maqr` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Bảng ghi nhận nhật ký check-in dịch vụ
CREATE TABLE `dichvu` (
`dichvu_id` INT(11) NOT NULL AUTO_INCREMENT,
`user_email` VARCHAR(100) NOT NULL,
`user_id` INT(11) NOT NULL,
`ngaysudung` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`dichvu_id`),
CONSTRAINT `fk_user_dichvu` FOREIGN KEY (`user_id`)
REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Thiết kế API và luồng xử lý
- Endpoint
member_add.php: Tiếp nhận payload POST (hoten, sdt, email), thực thi kiểm tra trùng lặp email, gọi QRcode::png() để sinh file ảnh định dạng .png trong thư mục temp/, sau đó lưu bản ghi vào bảng user.
- Endpoint
checkin_process.php: Tiếp nhận dữ liệu quét từ máy đọc (chuỗi email), thực hiện truy vấn SELECT id, hoten FROM user WHERE email = ?. Nếu tồn tại, tiến hành câu lệnh INSERT INTO dichvu (user_email, user_id, ngaysudung) VALUES (...) và trả về phản hồi xác thực thành công.
Methodology
Đồ án áp dụng mô hình phát triển phần mềm thác nước tinh gọn (Iterative Waterfall Model) gồm 4 giai đoạn thực thi nghiêm ngặt trong 12 tuần:
Tuần 1-3: Nghiên cứu lý thuyết mã ma trận & Toán học Reed-Solomon
Ma trận đánh giá rủi ro và giải pháp khắc phục
- Rủi ro ảnh mã QR bị mờ hoặc rách: Sử dụng mức sửa lỗi tiêu chuẩn Level L (khôi phục 7% dữ liệu bị mất) hoặc Level Q (khôi phục 25%), đảm bảo camera vẫn giải mã chính xác dù ảnh bị nhiễu.
- Rủi ro trùng lặp khóa chính hoặc email: Thiết lập chỉ mục
UNIQUE trên trường email ở tầng CSDL và kiểm tra biểu thức chính quy (Regex validation) ở tầng ứng dụng PHP.
- Rủi ro độ trễ ghi CSDL khi số lượng quét lớn: Tối ưu hóa cấu trúc bảng với khóa ngoại có chỉ mục (Indexed Foreign Keys), đảm bảo thời gian thực thi câu lệnh
INSERT dưới 15ms.
Implementation và kết quả
Development process
Quá trình phát triển hệ thống hiện thực hóa thuật toán sinh mã ma trận QR Code Version 1 ($21 \times 21$ modules) thông qua các bước toán học chặt chẽ:
- Phân tích chế độ mã hóa (Mode Indicator): Đối với dữ liệu chữ và số (Alphanumeric), bộ chỉ chế độ 4-bit được gán giá trị
0010.
- Mã hóa độ dài dữ liệu (Character Count Indicator): Chuỗi ký tự đầu vào được đo độ dài và nhị phân hóa sang chuỗi 9-bit (cho QR Version 1 đến 9). Ví dụ, chuỗi
"HELLO WORLD" gồm 11 ký tự chuyển thành 000001011.
- Mã hóa dữ liệu sang chuỗi nhị phân: Nhóm các ký tự thành từng cặp 2 ký tự. Giá trị nhị phân 11-bit được tính theo công thức:
$$V = (ASCII_1 \times 45) + ASCII_2$$
Ký tự lẻ đơn lẻ cuối cùng được chuyển đổi thành chuỗi 6-bit.
- Đệm bit (Bit Padding): Thêm 4 bit kết thúc
0000. Nếu độ dài chuỗi chưa đạt bội số của 8, thêm các bit 0 vào cuối. Khi chuỗi chưa đủ dung lượng khối mã của phiên bản, tiến hành thêm xen kẽ các byte đệm tiêu chuẩn: 11101100 (0xEC) và 00010001 (0x11).
- Tạo khối sửa lỗi Reed-Solomon: Chuyển đổi khối dữ liệu thành đa thức thông điệp $M(x)$ trên trường hữu hạn Galois Field $GF(2^8)$ với đa thức nguyên thủy:
$$P(x) = x^8 + x^4 + x^3 + x^2 + 1$$
Thực hiện phép chia đa thức $M(x) \cdot x^{2t}$ cho đa thức sinh $G(x) = \prod_{i=0}^{t-1} (x - \alpha^i)$ để thu về các hệ số sửa lỗi.
Hiện thực hóa mã nguồn sinh QR Code với PHP
Module sinh mã được tích hợp trực tiếp vào quy trình thêm thành viên mới, sử dụng thư viện qrlib.php:
<?php
// Tích hợp thư viện sinh mã QR chuyên dụng
require_once("phpqrcode/qrlib.php");
// Cấu hình đường dẫn lưu trữ tạm thời cho file ảnh ma trận
$PNG_TEMP_DIR = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR;
$PNG_WEB_DIR = 'temp/';
if (!file_exists($PNG_TEMP_DIR)) {
mkdir($PNG_TEMP_DIR, 0777, true);
}
// Tiếp nhận và làm sạch dữ liệu đầu vào
$user_email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$user_id = filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT);
if (!empty($user_email) && !empty($user_id)) {
// Thiết lập tham số mã hóa QR Code
// Cấp độ sửa lỗi: L (7%), M (15%), Q (25%), H (30%)
$errorCorrectionLevel = 'L';
// Kích thước điểm ảnh ma trận (Pixel size trên mỗi module)
$matrixPointSize = 4;
// Khoảng cách viền an toàn (Margin module)
$margin = 2;
// Đặt tên file định danh duy nhất theo ID người dùng
$filename = $PNG_TEMP_DIR . 'qr_' . md5($user_id . '_' . $user_email) . '.png';
$webPath = $PNG_WEB_DIR . 'qr_' . md5($user_id . '_' . $user_email) . '.png';
// Nội dung nhúng vào mã ma trận là địa chỉ email duy nhất
$codeContents = $user_email;
// Thực thi hàm tạo file ảnh PNG
QRcode::png($codeContents, $filename, $errorCorrectionLevel, $matrixPointSize, $margin);
// Cập nhật đường dẫn mã QR vào CSDL MySQL
$stmt = $conn->prepare("UPDATE `user` SET `maqr` = ? WHERE `id` = ?");
$stmt->bind_param("si", $webPath, $user_id);
$stmt->execute();
$stmt->close();
}
?>
Testing và validation
Hệ thống được thử nghiệm trên môi trường phần cứng chuẩn:
- Phần cứng: Laptop Asus X550LD, CPU Intel Core i5-4200U (1.6 GHz up to 2.6 GHz), 8GB RAM DDR3L, Ổ cứng SSD 240GB.
- Phần mềm: Hệ điều hành Windows 10 Pro 64-bit, Web Server Apache 2.4.38, PHP Engine 7.3.2, CSDL MySQL Community Server 5.7.25.
Kịch bản kiểm thử và số liệu hiệu năng
| Kịch bản kiểm thử |
Dữ liệu đầu vào |
Kết quả mong đợi |
Tỷ lệ thành công |
Thời gian phản hồi trung bình |
| Thêm mới thành viên & Sinh mã |
Thông tin hợp lệ (Tên, SĐT, Email) |
Tạo bản ghi CSDL, xuất ảnh PNG $21 \times 21$ module |
100% (50/50 mẫu) |
48 ms |
| Quét mã chuẩn trực tiếp |
Mã QR hiển thị trên màn hình smartphone |
Nhận diện chuỗi email, ghi log timestamp |
100% (100/100 lượt) |
320 ms |
| Quét mã bị mờ / Nghiêng góc $45^\circ$ |
Mã in trên giấy bị nghiêng góc và bóng sáng |
Thuật toán nhận diện vị trí (Finder Pattern) bù góc |
96% (48/50 lượt) |
450 ms |
| Bắt lỗi check-in không tồn tại |
Mã QR chứa email chưa đăng ký |
Báo lỗi "Thành viên không hợp lệ", không ghi log |
100% (20/20 mẫu) |
18 ms |
Thời gian xử lý Check-in trung bình (Tổng: 380 ms):
[ Camera Capture & Phân giải ảnh: 210 ms ] -> [ Giải mã chuỗi: 60 ms ] -> [ Truy vấn CSDL MySQL: 10 ms ] -> [ Render UI: 100 ms ]
Kết quả đạt được
Hệ thống đã hoàn thành 100% các chức năng đề ra trong đề tài tốt nghiệp:
- Module Quản trị: Cung cấp giao diện bảng điều khiển cho phép thêm, sửa, xóa, tra cứu danh sách người dùng và tải về mã QR tương ứng.
- Module Check-in Tự động: Giao diện tiếp nhận luồng quét liên tục, tự động trích xuất thông tin người dùng và hiển thị tức thì trạng thái điểm danh lên màn hình giám sát.
- Module Nhật ký: Thống kê danh sách điểm danh chi tiết kèm dấu thời gian chính xác tới từng giây (
YYYY-MM-DD HH:MM:SS).
Đổi mới và đóng góp
Đề tài đã chuyển hóa các lý thuyết phức tạp về xử lý ảnh ma trận và cấu trúc dữ liệu nhị phân thành một giải pháp phần mềm mang tính ứng dụng thực tiễn cao:
- Chuẩn hóa quy trình liên kết mã ma trận với khóa logic: Thay vì nhúng trực tiếp toàn bộ dữ liệu người dùng (làm tăng kích thước ma trận QR và gây khó khăn khi quét), hệ thống chỉ nhúng khóa logic định danh (Email duy nhất). Phương pháp này giúp mã QR luôn giữ được phiên bản ma trận nhỏ (Version 1 hoặc Version 2), tối ưu hóa tốc độ giải mã của camera ngay cả trong điều kiện ánh sáng yếu.
- Khả năng tự phục hồi dữ liệu vượt trội: Nhờ ứng dụng thuật toán Reed-Solomon tích hợp trong
qrlib.php, mã định danh có thể phục hồi từ 7% đến 25% các module bị che khuất hoặc trầy xước, vượt trội hoàn toàn so với mã vạch 1D truyền thống.
- Tối ưu hóa hiệu suất vận hành (Metrics cải tiến):
- Tốc độ điểm danh: Tăng 85% so với điểm danh giấy (giảm từ 15-20 giây xuống còn 1-2 giây cho toàn bộ thao tác quét và lưu vết).
- Độ chính xác dữ liệu: Đạt 99.9%, loại bỏ hoàn toàn hiện tượng nhầm lẫn tên hoặc bỏ sót lượt ghi danh.
- Chi phí vận hành: Giảm 95% chi phí in ấn thẻ cứng hoặc danh sách điểm danh bằng giấy.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Điểm danh giảng đường đại học: Giảng viên hiển thị máy quét tại cửa lớp; sinh viên sử dụng mã QR lưu trên smartphone để check-in đầu giờ, dữ liệu tự động đồng bộ về hệ thống quản lý đào tạo.
- Kiểm soát vé vào cửa sự kiện/hội thảo: Ban tổ chức gửi mã QR qua email xác nhận đăng ký; khách mời quét mã tại quầy lễ tân để nhận thẻ đeo trong vòng chưa đầy 1 giây.
- Chấm công nhân sự tại doanh nghiệp: Thay thế máy chấm công vân tay (vốn dễ lây lan vi khuẩn hoặc lỗi vân tay mòn) bằng trạm quét mã QR cá nhân hóa.
Yêu cầu triển khai hệ thống (System Requirements)
- Máy chủ (Server):
- CPU: 2 Cores 2.0 GHz trở lên.
- RAM: Tối thiểu 2GB RAM.
- Lưu trữ: 10GB dung lượng trống.
- Môi trường: Linux (Ubuntu 18.04 LTS+) hoặc Windows Server, cài đặt Apache 2.4+, PHP 7.1+, MySQL 5.7+.
- Máy trạm quét mã (Client):
- Máy tính hoặc máy tính bảng trang bị Camera/Webcam độ phân giải tối thiểu 720p HD hoặc máy quét mã vạch 2D cầm tay giao tiếp USB/HID.
- Trình duyệt Web hiện đại: Google Chrome 70+, Mozilla Firefox 65+, Microsoft Edge.
Phân tích chi phí - lợi ích (Cost-Benefit & ROI)
Bảng dự toán chi phí triển khai hệ thống cho quy mô 500 người dùng:
-------------------------------------------------------------------------
Hạng mục Giải pháp Thẻ RFID Giải pháp QR Code (Đề tài)
-------------------------------------------------------------------------
Phôi thẻ / In ấn 5.000.000 VNĐ 0 VNĐ (Gửi Digital)
Thiết bị đầu đọc chuyên dụng 3.500.000 VNĐ 500.000 VNĐ (Webcam HD)
Bảo trì / Thay thế thẻ mất 1.500.000 VNĐ/năm 0 VNĐ
-------------------------------------------------------------------------
TỔNG CHI PHÍ BAN ĐẦU: 10.000.000 VNĐ 500.000 VNĐ
TIẾT KIỆM CHI PHÍ: ~95% ngay trong năm đầu tiên
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Mã QR tĩnh (Static QR): Mã sinh ra cố định theo email, tiềm ẩn nguy cơ người dùng chụp ảnh màn hình gửi cho người khác để check-in hộ (proxy check-in).
- Phụ thuộc kết nối mạng: Khi mất kết nối tới máy chủ CSDL MySQL, quy trình check-in bị gián đoạn do chưa hỗ trợ bộ nhớ đệm ngoại tuyến (Offline Storage/PWA).
- Giao diện quét mã: Hệ thống phiên bản đầu sử dụng thư viện quét cơ bản, chưa tối ưu khả năng tự động lấy nét (Auto-focus) trên các thiết bị di động tầm thấp.
Hướng phát triển mở rộng
- Phát triển mã QR động (Dynamic Time-based QR / TOTP): Ứng dụng thuật toán sinh mã ngẫu nhiên thay đổi sau mỗi 30 giây (tương tự Google Authenticator), ngăn chặn tuyệt đối hành vi gian lận gửi ảnh điểm danh hộ.
- Chuyển đổi kiến trúc sang RESTful API & Microservices: Tách rời Backend PHP thành các API chuẩn JSON, xây dựng ứng dụng di động đa nền tảng bằng Flutter hoặc React Native cho cả iOS và Android.
- Tích hợp giải pháp AI nhận diện khuôn mặt kép (Dual-Factor Authentication): Kết hợp quét mã QR với xác thực khuôn mặt tức thời qua camera nhằm nâng cấp tiêu chuẩn bảo mật cho các khu vực trọng yếu.
Đối tượng hưởng lợi
- Sinh viên & Học viên: Tiếp cận tài liệu nghiên cứu chuẩn mực về cấu trúc ma trận 2D, giải thuật toán học Reed-Solomon và cách nhúng thư viện mã nguồn mở vào dự án thực tế.
- Lập trình viên Web: Nắm vững mô hình kiến trúc MVC/3-Tier cơ bản với PHP & MySQL, kỹ thuật xử lý ảnh đồ họa với thư viện GD/phpqrcode và các mẫu truy vấn cơ sở dữ liệu quan hệ tối ưu.
- Doanh nghiệp & Trường học: Sở hữu một giải pháp quản trị điểm danh/check-in chi phí cực thấp, dễ dàng làm chủ công nghệ và triển khai trên hạ tầng sẵn có mà không phụ thuộc vào nhà cung cấp thứ ba.
- Nhà nghiên cứu ứng dụng: Bản thiết kế hệ thống là tiền đề vững chắc để phát triển các hệ sinh thái IoT thông minh kết hợp giữa nhận diện quang học và điện toán đám mây.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống là gì?
Hệ thống yêu cầu máy chủ cài đặt Apache 2.4+, PHP phiên bản 5.6 trở lên (khuyến nghị PHP 7.x) có bật extension gd để xử lý ảnh, cùng hệ quản trị CSDL MySQL 5.5+. Phía máy trạm chỉ cần một trình duyệt web có quyền truy cập camera hoặc kết nối đầu đọc mã 2D chuẩn USB.
2. Hệ thống có thể mở rộng (Scalability) để xử lý bao nhiêu người dùng cùng lúc?
Với cấu hình bảng dữ liệu chuẩn hóa InnoDB và chỉ mục khóa ngoại tối ưu, hệ thống xử lý tốt cơ sở dữ liệu lên tới 50.000 người dùng và đáp ứng tần suất quét 50-100 lượt/phút trên máy chủ phổ thông. Khi nâng cấp lên kiến trúc tải phân tán (Load Balancing) và Redis Caching, hệ thống có thể đáp ứng hàng ngàn lượt quét đồng thời.
3. Làm thế nào để tích hợp hệ thống vào phần mềm quản lý nhân sự/đào tạo có sẵn?
Dữ liệu của hệ thống được tổ chức dạng bảng quan hệ tiêu chuẩn trong MySQL. Đội ngũ kỹ thuật có thể dễ dàng liên kết dữ liệu qua các câu lệnh SQL liên kết bảng, hoặc xây dựng các API endpoint trả về định dạng JSON từ bảng dichvu để tích hợp vào các hệ thống ERP, CRM hoặc LMS (Moodle, Blackboard).
4. Chi phí bảo trì và vận hành hệ thống hàng năm là bao nhiêu?
Hệ thống sử dụng hoàn toàn nền tảng mã nguồn mở (PHP, Apache, MySQL, phpqrcode), do đó chi phí bản quyền phần mềm là 0 VNĐ. Chi phí duy nhất là tiền duy trì máy chủ/hosting (khoảng 500.000 - 1.500.000 VNĐ/năm tùy quy mô).
5. Hệ thống xử lý thế nào khi người dùng làm mất hoặc quên mang mã QR?
Quản trị viên có thể truy cập phân hệ "Danh sách thành viên", tra cứu theo tên hoặc số điện thoại để lấy lại mã QR gốc hoặc thực hiện check-in thủ công trực tiếp trên giao diện quản trị trong vài giây.
Kết luận
Đồ án tốt nghiệp "Tìm hiểu QRcode và ứng dụng cho bài toán check-in tự động" của sinh viên Phạm Văn Hoàng Hà đã giải quyết trọn vẹn và xuất sắc bài toán số hóa quy trình điểm danh truyền thống. Thông qua việc làm chủ lý thuyết toán học mã hóa ma trận, cơ chế sửa lỗi Reed-Solomon và hiện thực hóa thành công trên nền tảng Web PHP/MySQL, hệ thống đã chứng minh được tính khả thi kỹ thuật vượt trội, độ tin cậy cao và khả năng ứng dụng thực tiễn rộng lớn. Giải pháp không chỉ giúp các tổ chức tối ưu hóa chi phí vận hành và nâng cao tính chuyên nghiệp trong công tác quản trị, mà còn đóng vai trò là một tài liệu tham khảo kỹ thuật giá trị cho cộng đồng phát triển ứng dụng công nghệ thông tin.