CHƯƠNG 1: QRCODE VÀ TÌM HIỂU VỀ LẬP TRÌNH WEB TRÊN PHP/SQL I .Giới thiệu về Qrcode 1. QRcode : Mã vạch thế hệ mới QR Code bây giờ không hẳn là quá xa lạ, nó bắt đầu xuất hiện khắp nơi như nhãn bìa sản phẩm, và gần như là phương thức nhận diện chủ yếu cho ứng dụng di động. Vậy QR Code là gì?. QR Code, viết tắt của Quick response code (tạm dịch "Mã phản hồi nhanh") hay còn gọi là mã vạch ma trận (matrix-barcode) là dạng mã vạch hai chiều (2D) có thể được đọc bởi một máy đọc mã vạch hay smartphone (điện thoại thông minh) có chức năng chụp ảnh (camera) với ứng dụng chuyên biệt để quét mã vạch.
Một mã QR có thể chứa đựng thông tin một địa chỉ web (URL), thời gian diễn ra một sự kiện, thông tin liên hệ (như vCard), địa chỉ email, tin nhắn SMS, nội dung ký tự văn bản hay thậm chí là thông tin định vị vị trí địa lý. Tùy thuộc thiết bị đọc mã QR mà bạn dùng khi quét, nó sẽ dẫn bạn tới một trang web, gọi đến một số điện thoại, xem một tin nhắn. Điểm khác nhau giữa mã QR và mã vạch truyền thống là lượng dữ liệu chúng nắm giữ hay chia sẻ. Các mã vạch truyền thống có các đường vạch thẳng dài một chiều và chỉ có thể lưu giữ 20 số chữ số, trong khi các mã QR hai chiều có thể lưu giữ thông tin hàng ngàn ký tự chữ số.
Mã QR nắm giữ nhiều thông tin hơn và tính chất dễ sử dụng sẽ giúp ích rất nhiều cho người dùng trong mọi lĩnh vực. Ngoài ra, QR code có lợi thế hơn do có thể đọc được cả hai chiều cả ngang và dọc và từ bất kỳ hướng nào mà không bị ảnh hưởng bởi chất liệu hay nền mà nó đang sử dụng. Chính vì thế mà QR code đang là xu hướng hiện nay và dần thay thế cho Bar code truyền thống Qrcode có 2 loại chính : động và tĩnh. -QRcode động, hay còn gọi là “Qrcode trực tiếp”: sau khi được khởi tạo, liên kết chính của chúng có thể được chỉnh sửa mà không cần can thiệp vào code.
Khi được quét, code động sẽ chuyến hướng bạn đến máy chủ, nơi lưu chữ thông tin cụ thể trong một cơ sở dữ liệu và được lâp trình để tương tác cụ thể với SV: Phạm Văn Hoàng Hà – CT1802 5 ĐỒ ÁN TỐT NGHIỆP Trường ĐHDL Hải Phòng hình ảnh được quét đó. Code động tiện lợi hơn vì chúng được tạo ra áp dụng một lần, và bạn có thể thay đổi các thông tin được hiển thị khi đó được quét như cac liên kết(domain,web) để hiển thị thông tin. -QRcode tĩnh: không giống như các code động, code tĩnh có thể lũu trữ các thông tin trực tiếp qua hình thức văn bản họăc dẫn đến các trang web mà không cần chuyển hướng qua liên kết thứ cấp. Điều này có nghĩa rằng các thông tin hoặc liên kết không thể thay đổi hoặc chỉnh sửa(bạn sẽ phải tạo ra một code tĩnh mới mỗi lần muốn cập nhật).
Code tĩnh rất lý tưởng cho những người muốn mã chứa thông tin của họ vĩnh viễn(ví dụ, thông tin về ngày sinh và nhóm máu). Thuật toán QRcode 2.1 Tạo một chuỗi nhị phân: Bước đầu tiên để tạo một mã QR code là tạo một chuỗi nhị phân bao gồm dữ liệu và thông tin về chế độ mã hóa, cũng như độ dài của dữ liệu. SV: Phạm Văn Hoàng Hà – CT1802 6 ĐỒ ÁN TỐT NGHIỆP Trường ĐHDL Hải Phòng Trong phần này chúng ta sẽ tìm hiểu mã hóa chuỗi HELLO WORLD ở QR code phiên bản 1, với mức độ sửa lỗi là Q. Bước 1: Mã hóa Bộ chỉ chế độ (Mode Indicator) Một bộ chỉ chế độ là một chuỗi 4 bit thể hiện chế độ dữ liệu bạn đang sử dụng: kiểu số, kiểu chuỗi, kiểu nhị phân hoặc Nhật ngữ.
Mode Indicator Với chuỗi HELLO WORLD, là kiểu chuỗi, vậy nên Bộ chỉ chế độ sẽ là 0010. Chuỗi nhị phân: 0010 Bước 2: Mã hóa độ dài của dữ liệu Trong bước này, chúng ta xác định có bao nhiêu ký tự trong thông điệp, và chuyển độ dài đó thành một số nhị phân. Với chuỗi HELLO WORLD, có 11 ký tự kể cả khoảng trắng. Ta chuyển 11 sang nhị phân, được 1011.
Xem danh sách ở dưới. Khi mã hóa độ dài của dữ liệu, chúng ta mã hóa nó sử dụng một số lượng bit đặc tả. Như đã nói ở đầu, chúng ta sử dụng QR code phiên bản 1, vậy nên chúng ta cần sử dụng 9 bit để mã hóa độ dài dữ liệu. Ta thêm số 0 vào đầu chuỗi cho đên khi đủ 9 bit: 000001011.
Phiên bản 1 tới 9 -Kiểu số: 10 bits -Kiểu chuỗi: 9 bits -Kiểu nhị phân: 8 bits -Kiểu Nhật ngữ: 8 bits Phiên bản 10 tới 26 -Kiểu số: 12 bits SV: Phạm Văn Hoàng Hà – CT1802 7 ĐỒ ÁN TỐT NGHIỆP Trường ĐHDL Hải Phòng -Kiểu chuỗi: 11 bits -Kiểu nhị phân: 16 -Kiểu Nhật ngữ: 10 bits Phiên bản 27 tới 40 -Kiểu số: 14 bits -Kiểu chuỗi: 13 bits -Kiểu nhị phân: 16 bits -Kiểu Nhật ngữ: 12 bits Tới đây chuỗi nhị phân chúng ta là: 0010 000001011. Bước 3: Mã hóa dữ liệu Để mã hóa chuỗi ký tự, ta chia chuỗi thành các cặp ký tự: HE,LL,O ,WO,RL,D. Với mỗi cặp ký tự, ta lấy giá trị mã ASCII của ký tự đầu nhân với 45, sau đó cộng với giá trị mã ASCII của ký tự sau. Sau đó chuyển kết quả thu được thành một chuỗi nhị phân 11 bit.
Đối với các ký tự không có cặp, tao lấy giá trị mã ASCII của nó rồi chuyển thành chuỗi nhị phân 6 bit. Đối với các chế độ khác: kiểu số, kiểu nhị phân, kiểu Nhật ngữ, tao sử dụng phương thức khác để mã hóa dữ liệu. Bước 4: Hoàn thành các bit Với chuỗi bit thu được ở trên, ta phải chắc chắn rằng nó có đủ độ dài. Điều này phụ thuộc vào việc có bao nhiêu bit chúng ra cần để tạo phiên bản và sửa lỗi.
SV: Phạm Văn Hoàng Hà – CT1802 8 ĐỒ ÁN TỐT NGHIỆP Trường ĐHDL Hải Phòng Với QR code phiên bản 1, sửa lỗi mức độ Q. Chúng ta phải tạo một chuỗi 104 bit. Nếu chuỗi bit nhỏ ít hơn 104, ta phải thêm 4 số 0 vào cuối chuỗi. Nếu thêm 4 số 0 được một chuỗi nhiều hơn 104, ta chỉ cần thêm số 0 cho tới khi nào đủ 104 bit.
Chuỗi của chúng ta có 59 bit, ta thêm 4 số 0 vào cuối chuỗi. Chuỗi của ta bây giờ là: 0010 000001011 01100001011 01111000110 10001011100 10110111000 10011010100 001101 0000 Bước 5: Giới hạn chuỗi thành các chuỗi con 8 bit, sau đó thêm các số 0 nếu cần. Bước này ta chia chuỗi thành các nhóm 8 bit. Ở chuỗi con cuối cùng, nếu chưa đủ 8 bit thì ta thêm vào sau đó các số 0 cho tới khi đủ.
Chuỗi của chúng ta thêm 2 số 0 vào sau chuỗi con cuối cùng. 00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 Bước 6:Thêm các từ vào cuối nếu chuỗi quá ngắn Nếu chuỗi bit của chúng ta vẫn chưa đủ dài, có hai chuỗi con đặc biệt: 11101100 và 00010001. Ta thêm thay phiên hai chuỗi con này vào chuối chuỗi của chúng ta. Chuỗi của chúng ta chỉ có 10 chuỗi con, cần phải thêm vào 3 chuỗi con nữa.
Bắt đầu thêm 11101100, sau đó thêm 00010001, rồi tới 11101100. Nếu cần nhiều hơn thì cứ thêm lần lượt như vậy cho tới khi đủ số chuỗi con. Chuỗi của chúng ta bây giờ: 00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 11101100 00010001 11101100 2.2 Tạo bộ mã sửa lỗi Bước1: Chọn mức sửa lỗi SV: Phạm Văn Hoàng Hà – CT1802 9 ĐỒ ÁN TỐT NGHIỆP Trường ĐHDL Hải Phòng Bước đầu tiên để tạo mã sửa lỗi là xác định có bao nhiêu từ để tạo cho phiên bản QR và mức độ sửa lỗi. Xem bảng sửa lỗi để biết thêm thông tin chi tiết Bước 2: Tạo một thông điệp đa thức Chúng ta chuyển 13 khối dữ liệu ở trên thành dạng thập phân: 00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 11101100 00010001 11101100 Ta được: 32, 91, 11, 120, 209, 114, 220, 77, 67, 64, 236, 17, 236 Các số này sẽ là hệ số của đa thức.
Ta có: 32x25 + 91x24 + 11x23 + 120x22 + 209x21 + 114x20 + 220x19 + 77x18 + 67x17 + 64x16 + 236x15 + 17x14 + 236x13 Lũy thừa của số hạng đầu tiên được tính: Số khối dữ liệu + số mã sửa lỗi -1 Ở đây là 13+13-1=25. Vậy nên số hạng đầu tiên là 32x25. Bước 3: Tạo bộ tạo đa thức Tiếp theo ta sẽ tạo một bộ tạo đa thức. Ta chia thông điệp đa thức bởi bộ tạo này để tạo mã sửa lỗi.
Các bộ tạo đa thức đến từ một cái gì đó gọi là một trường hữu hạn , cũng được biết đến như là một trường Galois. Các mã QR sử dụng một trường Galois có 256 yếu tố, có nghĩa là, mục đích của chúng ta, rằng những con số mà chúng ta sẽ được giao dịch với sẽ luôn luôn tối đa là 255 và ít nhất là 0. SV: Phạm Văn Hoàng Hà – CT1802 10 ĐỒ ÁN TỐT NGHIỆP Trường ĐHDL Hải Phòng Để thực hiện việc phân chia đa thức, chúng ta sẽ được chuyển đổi qua lại giữa các ký hiệu α (alpha) và các số nguyên. Alpha và các giá trị số nguyên từ bảng log và antilog.
Bộ tạo đa thức luôn luôn có dạng (x – α) (x – α 2) … (x – α t), , t tương đương với số lượng mã sửa lỗi cần thiết trừ đi 1.Chúng ta cần 13 mã sửa lỗi, do đó, t trong trường hợp này là 12. Ta thức hiện triển khai tất cả các thành phần (x – α) cho tới khi chúng ta được đa thức. Công việc này thực hiện bằng tay khá phức tạp, sử dụng generator polynomial tool. Ở đây chúng ta tạo 13 mã sửa lỗi: α0x25 + α74x24 + α152x23 + α176x22 + α100x21 + α86x20 + α100x19 + α106x18 + α104x17 + α130x16 + α218x15 + α206x14 + α140x13+ α78x12 Dưới đây, tôi cho thấy từng bước của việc phân chia đa thức cần thiết để tạo ra mã sửa lỗi Kết quả của bước này ta được mã sửa lỗi: 168 72 22 82 217 54 156 0 46 15 180 122 16 Ta đặt đoạn mã sửa lỗi sau đoạn mã dữ liệu: 32 91 11 120 209 114 220 77 67 64 236 17 236 168 72 22 82 217 54 156 0 46 15 180 122 16 Chuyển qua nhị phân: 00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 11101100 00010001 11101100 10101000 01001000 00010110 01010010 11011001 00110110 10011100 00000000 00101110 00001111 10110100 01111010 00010000 2.