Hướng dẫn tạo QR bằng Java đơn giản, nhanh chóng
4 phút đọc20/08/2025
Về tác giả
I’m passionate about web development and sharing my insights through articles, with over 8 years of experience. I hope these sharings inspire you and help build a strong web development community.
@#@
Tôi đam mê phát triển web và chia sẻ những hiểu biết của mình thông qua các bài viết, với hơn 8 năm kinh nghiệm. Tôi hy vọng những chia sẻ này sẽ truyền cảm hứng cho các bạn và giúp xây dựng một cộng đồng phát triển web mạnh mẽ.
Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn
{"success":true,"head":"<title>Hướng dẫn tạo QR bằng Java đơn giản, nhanh chóng - CyStack Tutorial</title>\n<meta name=\"description\" content=\"Chào bạn, hôm nay chúng ta sẽ cùng khám phá một chủ đề thú vị: lập trình tạo QR bằng Java. Nếu bạn là một người yêu công nghệ và luôn cập nhật những xu hướng\"/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-video-preview:-1, max-image-preview:large\"/>\n<link rel=\"canonical\" href=\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/\" />\n<meta property=\"og:locale\" content=\"en_US\" />\n<meta property=\"og:type\" content=\"article\" />\n<meta property=\"og:title\" content=\"Hướng dẫn tạo QR bằng Java đơn giản, nhanh chóng - CyStack Tutorial\" />\n<meta property=\"og:description\" content=\"Chào bạn, hôm nay chúng ta sẽ cùng khám phá một chủ đề thú vị: lập trình tạo QR bằng Java. Nếu bạn là một người yêu công nghệ và luôn cập nhật những xu hướng\" />\n<meta property=\"og:url\" content=\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/\" />\n<meta property=\"og:site_name\" content=\"CyStack Tutorial\" />\n<meta property=\"article:tag\" content=\"vi\" />\n<meta property=\"article:section\" content=\"Java\" />\n<meta property=\"og:updated_time\" content=\"2026-08-03T17:23:43+07:00\" />\n<meta property=\"og:image\" content=\"https://s2.cystack.net/tutorial/20213021/huong-dan-tao-qr-bang-java.jpg\" />\n<meta property=\"og:image:secure_url\" content=\"https://s2.cystack.net/tutorial/20213021/huong-dan-tao-qr-bang-java.jpg\" />\n<meta property=\"og:image:width\" content=\"1200\" />\n<meta property=\"og:image:height\" content=\"630\" />\n<meta property=\"og:image:alt\" content=\"tạo QR bằng Java\" />\n<meta property=\"og:image:type\" content=\"image/jpeg\" />\n<meta property=\"article:published_time\" content=\"2025-08-20T21:31:31+07:00\" />\n<meta property=\"article:modified_time\" content=\"2026-08-03T17:23:43+07:00\" />\n<meta name=\"twitter:card\" content=\"summary_large_image\" />\n<meta name=\"twitter:title\" content=\"Hướng dẫn tạo QR bằng Java đơn giản, nhanh chóng - CyStack Tutorial\" />\n<meta name=\"twitter:description\" content=\"Chào bạn, hôm nay chúng ta sẽ cùng khám phá một chủ đề thú vị: lập trình tạo QR bằng Java. Nếu bạn là một người yêu công nghệ và luôn cập nhật những xu hướng\" />\n<meta name=\"twitter:image\" content=\"https://s2.cystack.net/tutorial/20213021/huong-dan-tao-qr-bang-java.jpg\" />\n<meta name=\"twitter:label1\" content=\"Written by\" />\n<meta name=\"twitter:data1\" content=\"Bao Tran\" />\n<meta name=\"twitter:label2\" content=\"Time to read\" />\n<meta name=\"twitter:data2\" content=\"4 minutes\" />\n<script type=\"application/ld+json\" class=\"rank-math-schema\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https://blog.cystack.org/tutorial/#person\",\"name\":\"CyStack Tutorial\"},{\"@type\":\"WebSite\",\"@id\":\"https://blog.cystack.org/tutorial/#website\",\"url\":\"https://blog.cystack.org/tutorial\",\"name\":\"CyStack Tutorial\",\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https://s2.cystack.net/tutorial/20213021/huong-dan-tao-qr-bang-java.jpg\",\"url\":\"https://s2.cystack.net/tutorial/20213021/huong-dan-tao-qr-bang-java.jpg\",\"width\":\"1200\",\"height\":\"630\",\"caption\":\"t\\u1ea1o QR b\\u1eb1ng Java\",\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":\"1\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":\"2\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/category/java/\",\"name\":\"Java\"}},{\"@type\":\"ListItem\",\"position\":\"3\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/\",\"name\":\"H\\u01b0\\u1edbng d\\u1eabn t\\u1ea1o QR b\\u1eb1ng Java \\u0111\\u01a1n gi\\u1ea3n, nhanh ch\\u00f3ng\"}}]},{\"@type\":\"WebPage\",\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/#webpage\",\"url\":\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/\",\"name\":\"H\\u01b0\\u1edbng d\\u1eabn t\\u1ea1o QR b\\u1eb1ng Java \\u0111\\u01a1n gi\\u1ea3n, nhanh ch\\u00f3ng - CyStack Tutorial\",\"datePublished\":\"2025-08-20T21:31:31+07:00\",\"dateModified\":\"2026-08-03T17:23:43+07:00\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/#website\"},\"primaryImageOfPage\":{\"@id\":\"https://s2.cystack.net/tutorial/20213021/huong-dan-tao-qr-bang-java.jpg\"},\"inLanguage\":\"en-US\",\"breadcrumb\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/#breadcrumb\"}},{\"@type\":\"Person\",\"@id\":\"https://blog.cystack.org/tutorial/author/baotran/\",\"name\":\"Bao Tran\",\"url\":\"https://blog.cystack.org/tutorial/author/baotran/\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https://secure.gravatar.com/avatar/0cdd33c02ec4a531fcf557b9c1ccc276df0c69031b2382c959bcf335248e840c?s=96&d=mm&r=g\",\"url\":\"https://secure.gravatar.com/avatar/0cdd33c02ec4a531fcf557b9c1ccc276df0c69031b2382c959bcf335248e840c?s=96&d=mm&r=g\",\"caption\":\"Bao Tran\",\"inLanguage\":\"en-US\"}},{\"@type\":\"BlogPosting\",\"headline\":\"H\\u01b0\\u1edbng d\\u1eabn t\\u1ea1o QR b\\u1eb1ng Java \\u0111\\u01a1n gi\\u1ea3n, nhanh ch\\u00f3ng - CyStack Tutorial\",\"keywords\":\"t\\u1ea1o QR b\\u1eb1ng java\",\"datePublished\":\"2025-08-20T21:31:31+07:00\",\"dateModified\":\"2026-08-03T17:23:43+07:00\",\"articleSection\":\"Java\",\"author\":{\"@id\":\"https://blog.cystack.org/tutorial/author/baotran/\",\"name\":\"Bao Tran\"},\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"description\":\"Ch\\u00e0o b\\u1ea1n, h\\u00f4m nay ch\\u00fang ta s\\u1ebd c\\u00f9ng kh\\u00e1m ph\\u00e1 m\\u1ed9t ch\\u1ee7 \\u0111\\u1ec1 th\\u00fa v\\u1ecb: l\\u1eadp tr\\u00ecnh t\\u1ea1o QR b\\u1eb1ng Java. N\\u1ebfu b\\u1ea1n l\\u00e0 m\\u1ed9t ng\\u01b0\\u1eddi y\\u00eau c\\u00f4ng ngh\\u1ec7 v\\u00e0 lu\\u00f4n c\\u1eadp nh\\u1eadt nh\\u1eefng xu h\\u01b0\\u1edbng\",\"name\":\"H\\u01b0\\u1edbng d\\u1eabn t\\u1ea1o QR b\\u1eb1ng Java \\u0111\\u01a1n gi\\u1ea3n, nhanh ch\\u00f3ng - CyStack Tutorial\",\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/#richSnippet\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/#webpage\"},\"image\":{\"@id\":\"https://s2.cystack.net/tutorial/20213021/huong-dan-tao-qr-bang-java.jpg\"},\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https://blog.cystack.org/tutorial/vi/2025/08/20/huong-dan-tao-qr-bang-java/#webpage\"}}]}</script>\n"}
Chào bạn, hôm nay chúng ta sẽ cùng khám phá một chủ đề thú vị: lập trình tạo QR bằng Java. Nếu bạn là một người yêu công nghệ và luôn cập nhật những xu hướng mới, bạn chắc chắn đã thấy mã QR ở khắp mọi nơi từ các blog, website cho đến những địa điểm công cộng. Sự phổ biến của chúng thể hiện rõ nét trong các ứng dụng di động, nơi bạn chỉ cần dùng ứng dụng quét mã QR để đọc thông tin văn bản hoặc chuyển hướng đến một trang web nếu đó là URL.

Tôi tình cờ tìm hiểu về công nghệ này gần đây và thực sự thấy nó rất hấp dẫn. Nếu bạn muốn tìm hiểu sâu hơn về mã QR, bạn có thể tìm thấy rất nhiều thông tin hữu ích tại trang Wikipedia về Mã QR.
Lập trình tạo QR bằng Java
Khi bắt gặp hình ảnh mã QR xuất hiện dày đặc trên các website, tôi bắt đầu tìm kiếm một công cụ tạo mã QR bằng Java. Tôi đã xem xét một số API mã nguồn mở và thấy zxing nổi lên như một lựa chọn đơn giản và tối ưu nhất để sử dụng. Nếu bạn muốn tạo một hình ảnh mã QR, chúng ta chỉ cần thư viện core của nó. Bạn hãy thêm dependency sau vào dự án Maven của mình:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.2</version>
</dependency>
Nếu bạn muốn đọc hình ảnh QR thông qua dòng lệnh, chúng ta cần sử dụng thư viện JavaSE của zxing. Bạn có thể thêm dependency sau cho mục đích này:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.2</version>
</dependency>
Điều này cũng báo hiệu bạn sẽ cần thêm hai thư viện bổ sung khác để chạy ứng dụng từ dòng lệnh. Chúng ta sẽ cùng tìm hiểu cách thêm các file JAR này vào classpath để chạy ứng dụng client đọc mã QR ở phần sau của bài hướng dẫn.

Ví dụ zxing tạo ảnh mã QR
Đây là chương trình bạn có thể sử dụng để tạo ảnh mã QR với API của zxing. File GenerateQRCode.java của chúng ta sẽ trông như thế này:
package com.journaldev.qrcode.generator;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class GenerateQRCode {
public static void main(String[] args) throws WriterException, IOException {
String qrCodeText = "<https://www.journaldev.com>";
String filePath = "JD.png";
int size = 125;
String fileType = "png";
File qrFile = new File(filePath);
createQRImage(qrFile, qrCodeText, size, fileType);
System.out.println("DONE");
}
private static void createQRImage(File qrFile, String qrCodeText, int size, String fileType)
throws WriterException, IOException {
// Tạo ByteMatrix cho mã QR mã hóa chuỗi đã cho
Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<>();
hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix byteMatrix = qrCodeWriter.encode(qrCodeText, BarcodeFormat.QR_CODE, size, size, hintMap);
// Tạo BufferedImage để chứa mã QR
int matrixWidth = byteMatrix.getWidth();
BufferedImage image = new BufferedImage(matrixWidth, matrixWidth, BufferedImage.TYPE_INT_RGB);
image.createGraphics();
Graphics2D graphics = (Graphics2D) image.getGraphics();
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, matrixWidth, matrixWidth);
// Vẽ và lưu hình ảnh bằng ByteMatrix
graphics.setColor(Color.BLACK);
for (int i = 0; i < matrixWidth; i++) {
for (int j = 0; j < matrixWidth; j++) {
if (byteMatrix.get(i, j)) {
graphics.fillRect(i, j, 1, 1);
}
}
}
ImageIO.write(image, fileType, qrFile);
}
}
Chương trình này tạo ra một file ảnh mã QR có tên JD.png, trỏ đến URL của JournalDev. Bạn có thể sử dụng ứng dụng quét mã QR trên điện thoại di động để kiểm tra. Nó sẽ dẫn bạn đến trang chủ của JournalDev.

Ví dụ zxing đọc mã QR
Nếu bạn chưa có ứng dụng di động để kiểm tra, đừng lo lắng. Bạn hoàn toàn có thể đọc mã QR bằng API zxing thông qua dòng lệnh. Dưới đây là lệnh để đọc file ảnh mã QR:
$java -cp $HOME/.m2/repository/com/google/zxing/javase/3.3.2/javase-3.3.2.jar:.:$HOME/.m2/repository/com/google/zxing/core/3.3.2/core-3.3.2.jar:$HOME/.m2/repository/com/beust/jcommander/1.72/jcommander-1.72.jar:$HOME/.m2/repository/com/github/jai-imageio/jai-imageio-core/1.3.1/jai-imageio-core-1.3.1.jar com.google.zxing.client.j2se.CommandLineRunner JD.png
Lưu ý các file JAR bổ sung trong classpath mà zxing phụ thuộc (ví dụ: jcommander, jai-imageio-core). Lệnh này sẽ hiển thị nội dung của mã QR ngay trên terminal của bạn.

Chúng ta đã cùng nhau trải nghiệm cả quá trình tạo và đọc mã
Kết luận
Tóm lại, chúng ta đã cùng nhau khám phá cách sử dụng thư viện zxing để tạo QR bằng Java. Bạn đã biết cách thêm các dependencies cần thiết vào dự án Maven, triển khai mã để tạo ra một ảnh QR tùy chỉnh từ một chuỗi văn bản hoặc URL và thậm chí là đọc lại nội dung của nó ngay trên dòng lệnh. Bạn có thể tích hợp chức năng tạo mã QR vào các ứng dụng quản lý tài sản, hệ thống bán lẻ để theo dõi sản phẩm, hoặc sử dụng mã QR để đơn giản hóa quá trình đăng nhập và xác thực người dùng.