Bài viết dưới đây hướng dẫn tạo mã QR (QR code) rất đơn giản bằng PHP sử dụng lệnh qrencode trên Debian Linux server.

Chuẩn bị môi trường

Cài đặt gói qrencode trên server Debian Linux.

$ sudo apt-get install qrencode

Mã nguồn chương trình

Mã nguồn sau là wrapper bằng PHP cho lệnh qrencode. Chương trình nhận các cấu hình mã QR từ GET parameter và render ra mã QR dưới nhiều định dạng.

qr.php

<?php
$content = $_GET['content'] or die('No content');
$type = "PNG";
$args = "";

// Module size in dots (pixels)
if ( isset($_GET['size']) )
    $args .= "--size={$_GET['size']} ";

// Specify error correction level from L (lowest) to H (highest) (default=L)
if ( isset($_GET['level']) )
    $args .= "--level={$_GET['level']} ";

// Specify the width of the margins. (default=4 (2 for Micro QR)))
if ( isset($_GET['margin']) )
    $args .= "--margin={$_GET['margin']} ";

// Specify the DPI of the generated PNG. (default=72)
if ( isset($_GET['dpi']) )
    $args .= "--dpi={$_GET['dpi']} ";

// Specify the version of the symbol.
//
// The symbol versions of QR Code range from Version 1 to Version
// 40. Each version has a different module configuration or number
// of modules, ranging from Version 1 (21 x 21 modules) up to
// Version 40 (177 x 177 modules). Each higher version number
// comprises 4 additional modules per side by default. See
// http://www.qrcode.com/en/about/version.html for a detailed
// version list.
if ( isset($_GET['symversion']) )
    $args .= "--symversion={$_GET['symversion']} ";

// Make structured symbols. Version must be specified.
if ( isset($_GET['structured']) )
    $args .= "--structured ";

// Assume that the input text contains kanji (shift-jis).
if ( isset($_GET['kanji']) )
    $args .= "--kanji ";

// Encode in a Micro QR Code. (experimental)
if ( isset($_GET['micro']) )
    $args .= "--micro ";

// {PNG,EPS,SVG,ANSI,ANSI256,ASCII,ASCIIi,UTF8,ANSIUTF8}
// Specify the type of the generated image. (default=PNG)
if ( isset($_GET['type']) ) {
    $args .= "--type={$_GET['type']} ";
    $type = $_GET['type'];
}

switch ($type) {
    case "PNG":
        header("Content-type: image/png");
        break;

    case "SVG":
        header("Content-type: image/svg+xml");
        break;

    case "EPS":
        header("Content-type: application/postscript");
        break;

    default:
        header("Content-type: text/plain");
}

// Escape the slashes in string content
$content = addslashes($content);

// Execute qrcode command to generate the QR image data
passthru("qrencode {$args} -o - '{$content}'", $error);
if ($error !== 0) :
    $name = 'images/invalid.png';
    $fp = fopen($name, 'rb');
    header("Content-type: image/png");
    fpassthru($fp);
endif;

Cách dùng

Các tham số có thể truyền qua GET parameters:

ParameterMô tảMặc định
contentNội dung được nhúng trong mã QR (bắt buộc)
typeĐịnh dạng đầu ra (PNG, EPS, SVG, ANSI, ANSI256, ASCII, ASCIIi, UTF8, ANSIUTF8)PNG
sizeKích thước module bằng pixel3px
levelMức sửa lỗi (L, M, Q, H)L
marginKích thước đường biên bao ngoài bằng pixel.4px
dpiKích thước DPI của ảnh PNG.72
symversionPhiên bản QR (1 – 40 với QR, hoặc 1 – 4 với Micro QR)
Tham khảo thêm tại ĐÂY
auto
structuredTạo structured-append symbol (chia content vào nhiều mã QR), yêu cầu phải chỉ định symversion. Định dạng này không hỗ trợ Micro QR.false
kanjiNội dung có chứa Hán tự.false
microMã QR kích thước nhỏ (Micro QR).false

Ví dụ sử dụng qr.php để tạo QR code cho URL bài viết này.

<img src="qrcode.php?level=H&symversion=6&content=https://icreativ.pro/tao-qr-code-bang-php-qrencode" />