02 August, 2017
#10: Đằng sau tấm vé
mở đầu là 1 tấm ảnh đầy sắc màu 😉
Hôm nay lục máy tính thấy file project lập trình từ đợt prom, nghĩ lại thấy để bỏ không đấy thì phí quá. Các bạn đã đi prom năm vừa rồi chắc hẳn vẫn nhớ về mã vạch bí ẩn đằng sau tấm vé? Ở bài viết này, mình sẽ giải thích thêm về mã QR này.
cre: Trang Týt
Mục đích chính của mã này thực ra chỉ dùng để tránh làm giả mạo vé. Ngoài ra việc check vé bằng cách quét mã cũng có gì đó *chuyên nghiệp* hơn 😉
Mật bí
Đầu tiên, như các bạn thấy, các vé đều có 1 mã số gồm 3 chữ số, thực chất mình đánh số này bắt đầu từ 100 và kết thúc ở 800. Việc này để tránh có cách số 0 ở đầu tiện cho việc mã hoá (sẽ nói ở dưới đây), và cũng tránh gặp số “xấu” như 13 🙂) Mã QR thực chất vẫn theo chuẩn quốc tế, vì vậy nếu bạn quét bằng đt sẽ ra 1 dòng chữ thế này:
Đây chính là phần được giữ bí mật trong suốt quá trình phân phối vé. Thực ra nó cũng rất dễ hiểu. 1 mã có 2 phần như sau: Phần trước dấu chấm có mã số vé, riêng chữ số hàng trăm đc mã hoá theo quy tắc: 1=H , 2=C , 3=A , 4=P , 5=E , 6=K , 7=B , 8=Z , 9=Xphần sau dấu chấm giống như 1 phiên bản chữ ký số sơ khai do mình tự tạo ra, gồm 4 chữ số:
- 3 chữ số đầu = 1024 – (mã sốvé) Vì 100 < (mã sốvé) < 800 nên phần này sẽ luôn có 3 chữ số
- 1 chữ số cuối = (mã sốvé) chia lấy phần dư với 5 => luôn đc 1 số từ 0 đến 4 Và do chỉnh có quá trình tạo mã này đc giữ bí mật, nên chỉ có mình giải mã và kiểm tra được.
Mã được tạo bằng excel và sau đó 1 loại ảnh QR đc tạo ra để sẵn sàng ghép vào từng vé
Tất nhiên với prom năm sau mình phải sử dụng 1 cách phức tạp và khó đoán hơn rồi 😉Phần app quét mã trên đt thực chất dựa trên 1 app mã nguồn mở có sẵn trên mạng. Mỗi mã số đc quét xong sẽ đc lưu lại với 2 thông tin: ngày-giờ và mã số. Bằng cách cố định độ dài của phần mã hóa và chữ ký, việc lập trình trong app soát vé sẽ dễ dàng hơn.
Mã nguồn của phần mềm đc lưu trên github cá nhân của mình (code trong lúc buồn ngủ nên xấu quá…): https://github.com/ngxson/NuiScanne…
Lời kết
Prom năm nay mang đến cho mình 1 cảm giác rất mới lạ khi mình ko hẳn là BTC mà cũng ko hẳn là người tham dự. Có người từng hỏi mình nhận đc gì khi cho đi những thứ này? Với mình, mình nghĩ rằng tuổi trẻ ngắn lắm… nếu có cơ hội, tại sao không thử những thứ mới mẻ?