04.11.2026Diese Seite zeigt, wie eine Zeichenkette in einen zweidimensionalen Matrixcode kodiert werden kann, genauer gesagt in einen Quick-Response-Code. QR-Codes findet man heutzutage an vielen Orten, etwa auf Schildern im Nahverkehr oder auf Werbeplakaten. Ursprünglich wurden sie 1994 von Masahiro Hara für den Einsatz in der Fertigung erfunden. Die hier gezeigte Methode illustriert einen möglichen Algorithmus, echte Software dafür arbeitet womöglich aber anders.
Der erste Schritt dieses Vorgangs ist recht einfach: Der Text muss in einen Bitstrom umgewandelt werden, was oben animiert ist. Links sehen wir die URL dieser Seite und rechts wird jedes Zeichen in 8 Bits übersetzt.
Jeder QR-Code enthält Fehlerkorrekturbits, die, wie der Name schon sagt, bei Lesefehlern oder beschädigten Aufklebern helfen. Auf die Kodierung der Fehlerkorrektur gehen wir hier nicht näher ein, aber die dunkelroten Bits sind solche Fehlerkorrekturbits. Das QR-Format kennt vier Stufen der Fehlerkorrektur, hier verwenden wir die niedrigste. Außerdem gibt es Metadaten-Bits, etwa für die Länge der Daten und einen Modusindikator, diese sind hier dunkelgrün dargestellt.
Aus der Länge der Datenbits und der Stufe der Fehlerkorrektur lässt sich die benötigte Größe des QR-Codes berechnen, die sogenannte Version. Die Animation oben zeigt, wie alle Datenbits zusammen mit den übrigen Bits in die Form eines QR-Codes der passenden Version platziert werden.
Zum Vergleich führt die Animation oben dieselbe Platzierung mit der höchsten verfügbaren Stufe der Fehlerkorrektur durch. Wie man sieht, gibt es viel mehr dunkelrote Bits, wodurch eine höhere Version des QR-Codes nötig wird. Manchmal wird die Mitte des Codes von einem Logo oder ähnlichem verdeckt, was durch hohe Stufen der Fehlerkorrektur kompensiert werden kann.
Für den Rest dieser Seite verwenden wir wieder die niedrige Stufe der Fehlerkorrektur von vorher.
Dieser Schritt ist recht einfach: Die bisher leeren Bereiche werden mit den Positionsquadraten und den sogenannten Timing-Linien versehen, die auf ihrer ganzen Länge zwischen Weiß und Schwarz abwechseln. Dann können die Bits von vorher als weiße oder schwarze Quadrate, hier Module genannt, in den Körper des QR-Codes gesetzt werden.
Um große einfarbige Flächen und Muster zu vermeiden, die mit den Positionsmarkierungen verwechselt werden könnten, stehen acht Masken zur Verfügung, mit denen die kodierten Daten verändert werden. Die Maske ist hier in der Mitte zwischen dem ursprünglichen Code links und der endgültigen Fassung rechts zu sehen. Ist ein Pixel der Maske schwarz, wird das Modul von Schwarz zu Weiß getauscht oder umgekehrt. Ist das Pixel der Maske weiß, bleibt die Farbe des Moduls gleich (eine XOR-Operation). Für jede Maske wird eine Punktzahl berechnet, um heuristisch die beste auszuwählen. Hier sehen wir keine große Verbesserung, aber bei manchen QR-Codes ist die Maskierung für ein gutes Auslesen unerlässlich.
Wenn man genau an die Seiten der Positionsmarken schaut, sieht man, dass noch nicht jedes Modul gefüllt ist. Im letzten Schritt wird dieser wenige verbleibende Platz genutzt, um anzugeben, welche Stufe der Fehlerkorrektur gewählt und welche Maske verwendet wurde. Auch diese Information benötigt eigene Fehlerkorrekturbits.
Das war es auch schon! Wir haben einen ganzen QR-Code von Grund auf aufgebaut, der die URL dieser Seite als scanbares Bild kodiert. Die nächste Seite über QR-Codes zeigt, wie man das Bild eines solchen Codes wieder in Text dekodiert.
Das Claude Opus LLM hat bei der Erstellung dieser Seite geholfen. Weitere Algorithmen und Datenstrukturen finden sich auf der Hauptseite.
Bitte teilt diese Seite auf Social Media!