Giới thiệu mã QR
“QR” là viết tắt của “quick response” – phản hồi nhanh. Mã QR ngày càng được sử dụng rộng rãi nhờ tính tiện lợi khi truy cập thông tin mà không cần nhập liệu thủ công trên điện thoại. Về bản chất, mã QR là một dạng hình ảnh được tạo thành từ các ô vuông trắng đen, bên trong chứa thông tin số hóa có thể quét được. Hiện nay, mã QR xuất hiện ở nhiều nơi như thực đơn điện tử tại nhà hàng, thanh toán không tiếp xúc ở siêu thị, điểm danh nhanh tại sự kiện và nhiều ứng dụng thực tế khác.
Cách tạo mã QR
Như đã đề cập, mã QR là một lưới các ô vuông nhỏ lưu trữ dữ liệu dưới dạng nhị phân (0 và 1). Thông tin được mã hóa dưới dạng đặc biệt trong hình ảnh, đồng thời bạn có thể tùy chỉnh màu sắc, nền và viền miễn là cấu trúc mã không bị thay đổi.
Dưới đây là ví dụ tạo mã QR bằng thư viện Python “qrcode”:

Bài viết này sẽ giới thiệu cách sử dụng thư viện qrcode trong Python, từ cài đặt đến các tính năng nâng cao để thiết kế mã QR theo ý muốn.
Cài đặt thư viện
Đầu tiên, bạn cần cài đặt các thư viện cần thiết. Ở đây sử dụng PyCharm, nhưng bạn có thể dùng bất kỳ môi trường Python nào. Để cài đặt thư viện “qrcode”, mở terminal và nhập:
pip install qrcode

Sau khi cài xong, bạn đã có thể tạo mã QR và lưu dưới dạng file PNG hoặc hiển thị trực tiếp trong Python. Nếu muốn xử lý ảnh nâng cao hơn, bạn nên cài thêm thư viện Pillow để hỗ trợ thao tác ảnh.
pip install "qrcode[pil]"

Nhập thư viện và tạo mã QR cơ bản
Bắt đầu lập trình, bạn chỉ cần nhập thư viện với tên viết tắt cho tiện thao tác. Theo tài liệu Python QR Code, bạn có thể tạo và lưu nhanh mã QR cho một đường dẫn như sau:
import qrcode as qr
img = qr.make("https://pypi.org/project/qrcode/")
img.save("Python QR Code Documentaion.png")

Đây là ví dụ mã QR đơn giản, tạo bởi hàm make() và lưu thành file PNG nhờ save().
Tính năng nâng cao
Để sử dụng các tính năng nâng cao khi tạo ảnh, ta sẽ dùng class QRCode trong thư viện qrcode.
Khái niệm lớp (class) và đối tượng (object) là nền tảng cơ bản trong lập trình. Lớp giúp tạo ra nhiều đối tượng cùng thuộc tính (biến) và phương thức (hàm). Ta sẽ tận dụng class này để tạo mã QR dưới dạng đối tượng.
Dưới đây là đoạn mã mẫu tạo và lưu mã QR:
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data('https://towardsdatascience.com/implementing-the-coffee-machine-project-in-python-using-object-oriented-programming/')
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("Understanding Classes and Objects.png")

Tiếp theo, chúng ta sẽ cùng phân tích chi tiết đoạn mã trên và tìm hiểu các tùy chỉnh khác nhau.
Khởi tạo đối tượng
Dòng đầu sau khi import sẽ khởi tạo đối tượng QRCode với các tham số:
qr = qrcode.QRCode(
...
)
Ở đây, qrcode là tên thư viện, còn QRCode() là class.
Chọn phiên bản (version)
Tham số version có thể chọn số nguyên từ 1 đến 40, mỗi giá trị tương ứng một kích thước mã QR khác nhau.
import qrcode
qr = qrcode.QRCode(
version=1,
...
)
Ví dụ, đặt version là 5:

Và khi chọn version là 15:

Bạn có thể thấy, giá trị version càng lớn thì mã QR càng to. Giá trị nhỏ nhất là lưới 21×21 ô vuông.
Sửa lỗi (error correction)
Tham số tiếp theo là error_correction, quyết định khả năng phục hồi dữ liệu khi mã QR bị hỏng một phần. Có 4 mức độ:
- L (Thấp): sửa lỗi tối đa 7%
- M (Trung bình): 15%
- Q (Cao): 25%
- H (Rất cao): 30%, phù hợp với môi trường dễ trầy xước, bám bẩn
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
...
)
Cấp độ sửa lỗi càng cao, mã QR càng dễ đọc khi bị hư, nhưng kích thước mã cũng tăng theo, dữ liệu khó nén hơn.
So sánh các loại sửa lỗi:

L – sửa lỗi thấp

M – sửa lỗi trung bình

Q – sửa lỗi cao

H – sửa lỗi rất cao
Dễ thấy, mức sửa lỗi càng cao thì mã QR càng phức tạp, dung lượng lớn hơn nhưng khả năng phục hồi tốt hơn.
Kích thước ô vuông (box_size)
Tham số box_size quy định số pixel cho mỗi ô vuông trong mã QR.
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
...
)
Thay đổi giá trị này sẽ làm mã QR lớn hoặc nhỏ hơn về mặt hình ảnh:

Box Size = 1

Box Size = 100

Các ảnh trên minh họa sự khác nhau về kích thước ô vuông khi thay đổi thông số này.
Viền (border)
Tham số cuối cùng khi tạo đối tượng là border – số ô viền xung quanh mã QR. Giá trị tối thiểu là 4, có thể tăng thêm nếu muốn.

Border = 4

Border = 10
Bạn có thể dễ dàng kiểm soát độ dày viền bằng tham số này.
Thêm dữ liệu vào mã QR
Sau khi khởi tạo đối tượng với các tham số như trên, bạn thêm dữ liệu cần mã hóa bằng phương thức add_data(). Dữ liệu có thể là chuỗi, URL, vị trí, thông tin liên hệ…
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=1,
border=10,
)
qr.add_data('https://towardsdatascience.com/building-a-facial-recognition-model-using-pca-svm-algorithms-c81d870add16/')
qr.make(fit=True)
Dòng qr.make(fit=True) sẽ tự động điều chỉnh kích thước mã QR phù hợp với lượng dữ liệu.
Tạo ảnh mã QR
Sau khi tạo xong đối tượng mã QR, bạn có thể dùng Pillow để xuất ra hình ảnh, tùy chỉnh màu sắc và lưu lại. Ví dụ, đổi nền sang đen, màu mã thành hồng:
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=1,
border=10,
)
qr.add_data('https://towardsdatascience.com/using-python-to-build-a-calculator/')
qr.make(fit=True)
img = qr.make_image(fill_color="pink", back_color="black")
img.save("calc.png")

Kết luận
Trong bài viết này, bạn đã tìm hiểu về thư viện QR Code trong Python, cách tạo mã QR và lưu lại dưới nhiều định dạng. Ngoài ra, bạn còn biết cách tùy chỉnh các thông số nâng cao khi tạo mã QR, cũng như ứng dụng kiến thức về lớp và đối tượng trong lập trình Python. Đây là hướng dẫn phù hợp cho người mới bắt đầu, chỉ cần nắm được kiến thức cơ bản về class và object là có thể làm theo.
Tham khảo thêm các gợi ý ChatGPT sáng tạo nội dung hay nhất của tôi







