Wer nun in die Verlegenheit kommt, einen solchen QR-Code zu benötigen, kann natürlich Google bemühen und auf einen der vielen Anbieter zum Erstellen eines solchen Codes setzen. Wer jedoch etwas Ahnung von PHP hat, kann sich auch schnell einen eigenen QR-Code Generator basteln, dazu wird eigentlich nur eine entsprechende Klasse gebraucht, diese ein eine Datei eingebunden und aufgerufen mit ein paar Parametern. Also nichts wirklich Aufwendiges. Vorteil, man hat den ganzen Spaß auf seinem eigenen Webspace und somit auch die Kontrolle ob die generierten QR-Codes gültig bleiben oder nicht.

Die PHP Klasse

Nennt sich PHP QR Code und ist unter http://sourceforge.net/projects/phpqrcode/ zum freien Download zu finden. Die Klasse selbst steht unter GNU Public Liense und darf den Lizenzanforderungen entsprechend genutzt werden.

Der Generator

Eingebunden und verwendet wird das Ganz dann folgendermaßen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php
/**
 * PHP QR Code encoder
 *
 * Exemplatory usage
 *
 * PHP QR Code is distributed under LGPL 3
 * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 */


include ('qrlib.php');

$PNG_TEMP_DIR = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR;
$PNG_WEB_DIR = 'temp/';
$errorCorrectionLevel = 'M';
$matrixPointSize = 5;
$filename = $PNG_TEMP_DIR . 'qr-code.png';
$emptydata = false;

if(!file_exists($PNG_TEMP_DIR)) {
    mkdir($PNG_TEMP_DIR);
} // END if(!file_exists($PNG_TEMP_DIR))

if(!empty($_GET['generate'])) {
    $requestData = strip_tags($_GET['generate']);

    $errorCorrectionLevel = 'H';
    if(!empty($_GET['correction'])) {
        $errorCorrectionLevel = $_GET['correction'];
    }

    $matrixPointSize = 10;
    if(!empty($_GET['pointsize'])) {
        $matrixPointSize = $_GET['pointsize'];
    }

    $filename = $PNG_TEMP_DIR . 'qr-code-' . md5($requestData . '|' . $errorCorrectionLevel . '|' . $matrixPointSize) . '.png';

    if(isset($_GET['image']) && $_GET['image'] == 'retrieve') {
        QRcode::png($requestData, false, $errorCorrectionLevel, $matrixPointSize, 2);
    } else {
        QRcode::png($requestData, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
    }
} else {
    if(isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L', 'M', 'Q', 'H'))) {
        $errorCorrectionLevel = $_REQUEST['level'];
    } // END if(isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L', 'M', 'Q', 'H')))

    if(isset($_REQUEST['size'])) {
        $matrixPointSize = min(max((int)$_REQUEST['size'], 1), 10);
    } // ENDif(isset($_REQUEST['size']))

    if(isset($_REQUEST['data'])) {
        //it's very important!
        if(trim($_REQUEST['data']) == '') {
            $emptydata = true;
        } else {
            // user data
            $requestData = strip_tags($_REQUEST['data']);

            $filename = $PNG_TEMP_DIR . 'qr-code-' . md5($requestData . '|' . $errorCorrectionLevel . '|' . $matrixPointSize) . '.png';

            QRcode::png($requestData, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
        } // END if(trim($_REQUEST['data']) == '')
    } else {
        //default data
        $emptydata = true;
    } // END if(isset($_REQUEST['data']))
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>QR Code Generator</title>
    </head>
    <body>
        <header><h1>QR-Code generieren</h1></header>
        <section class="clearfix">
            <article class="qr-code-form">
                <form action="" method="post">
                    <div class="clearfix">
                        <div class="qr-data">
                            <label for="data">Data:</label>
                            <input type="text" id="data" name="data" value="<?php echo (isset($requestData) ? htmlspecialchars($requestData) : ''); ?>" placeholder="QR Code Data">
                        </div>
                        <div class="qr-ecc">
                            <label for="level">ECC:</label>
                            <select name="level" id="level">
                                <option value="L"<?php echo (($errorCorrectionLevel == 'L')?' selected' : ''); ?>>L - smallest</option>
                                <option value="M"<?php echo (($errorCorrectionLevel == 'M')?' selected' : ''); ?>>M</option>
                                <option value="Q"<?php echo (($errorCorrectionLevel == 'Q')?' selected' : ''); ?>>Q</option>
                                <option value="H"<?php echo (($errorCorrectionLevel == 'H')?' selected' : ''); ?>>H - best</option>
                            </select>
                        </div>
                        <div class="qr-size">
                            <label for="size">Size:</label>
                            <select name="size" id="size">
                                <?php
                                for($i = 1; $i <= 10; $i++) {
                                    echo '<option value="' . $i . '"' . (($matrixPointSize == $i) ? ' selected' : '') . '>' . $i . '</option>';
                                } // END for($i = 1; $i <= 10; $i++)
                                ?>
                            </select>
                        </div>
                        <div class="form-button">
                            <input type="submit" value="QR-Code Generieren">
                        </div>
                    </div>
                </form>
            </article>
            <?php
            if($emptydata == false) {
                ?>
                <article class="qr-code-image">
                    <p><img src="<?php echo $PNG_WEB_DIR . basename($filename); ?>" /></p>
                    <p><a href="<?php echo $PNG_WEB_DIR . basename($filename); ?>">Download</a></p>
                </article>
                <?php
            }
            ?>
        </section>
    </body>
</html>

Ich erspare mir an dieser Stelle einfach mal jegliche Erklärungen zum Code, das würde hier jetzt zu weit führen.

Viel Spaß mit euren eigenen QR-Codes :-)

4 Meinungen zu “PHP: QR-Codes zum selber basteln

  1. Es gibt Strichcodes, die man in der Form von E-Ink (die Anzeigeart, auf welcher die modernen E-Books basieren) kaufen kann. Gibt es so etwas auch mit QR-Code?

Schreibe einen Kommentar

Ihre Email-Adresse wird nicht veröffentlicht. Pflichtfelder sind durch * markiert.

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>