Es gibt verschiedene Zeichensätze, die man verwenden kann:

Man arbeitet im
      "Numeric Mode" nur mit Ziffern (Bitkennung 0001)
      "Alphanumeric Mode" mit Großbuchstaben, Ziffern und einigen Sonderzeichen (0010)
      "Byte-Mode", bei dem (praktisch) alle Zeichen möglich sind. (0100)

Im Allgemeinen wird man wohl den Byte-Mode verwenden, weshalb ich hier die beiden anderen Arten "außen vor" lasse!
mehr zu den anderen Modi


Byte-Mode:


Nun werden die Daten, bestehend aus
                    rot ... Nur hier gibt es Unterschiede bei den 3 Modi:
        4 Bit - Modus-Kennung,
        unterschiedlich viele Bits (s.u.) für die Anzahl der zu übertragenen Zeichen im Text,
        dem Text (den Ziffern; den alphanum. Zeichen),

        4 Bits für den Terminator "0000",
        Füllbits "0" bis zur nächsten 8-er-Bitzahl,
        Füllzeichen (je 8 Bit) bis zur Kapazitätsgrenze (s.u.)
zusammengesetzt - und zwar alle Bits nacheinander in einer Reihe!

Dieses Paket wird dann von vorn in 8-er-Blöcke aufgeteilt -> Daten-Bytes. (DB)

Bei größeren QR-Codes wird das DB-Bytepaket dann in verschiedene Blöcke aufgeteilt.
Man unterteilt in 2 Gruppen mit jeweils meist unterschiedlichen Blockanzahlen.
In allen Blöcken der Gruppe 1 sind immer gleich viele Bytes; ebenso in allen Blöcken der Gruppe 2. Diese beiden Anzahlen können sich aber unterscheiden (wenn, dann sind die Blöcke in Gruppe 2 immer um 1 Byte größer als die Blöcke in Gruppe 1).

Danach wird zu jedem Block mit Hilfe des Reed-Solomon-Verfahrens ein Block mit Korrekturbytes gebildet, mit deren Hilfe dann beschädigte QR-Codes "gerettet" werden können.
Die Anzahl der Korrekturbytes pro Block ist abhängig von der Versionsnummer und dem Korrekturlevel. Sie ist in beiden Gruppen für jeden Block aber gleich groß!

Hier findet Ihr die Tabelle mit allen Vorgaben zu einer Version mit einem bestimmten Korrekturlevel: Vorgaben


Anhand von konkreten Beispielen möchte ich das nochmals vertieft durchspielen:


Beispiel 1:      Text: Die Blume blüht

Es sind 15 Zeichen, also gerade noch Version 1 bei dem Korrekturgrad L (siehe Vorgabenseite) mit maximal 17 Zeichen.

Los geht's:

VorgangBitfolge danach
Es gibt im Text Großbuchstaben und Kleinbuchstaben ... wir verwenden den Byte-Modus mit der Bitkennung 01000100
Es sind 15 Zeichen zu kodieren; für Version 1 bis 9 müssen für die Zeichenanzahl 8 Bits, bei höheren Verionen 16 Bits verwendet werden.
Version 1: 15 als Dualzahl mit 8 Bits ergibt 00001111
0100 00001111
Jetzt kommen die Nachrichtenbytes 
D 68 010001000100 00001111 01000100
i 105 011010010100 00001111 01000100 01101001
e 101 011001010100 00001111 01000100 01101001 01100101
  32 001000000100 00001111 01000100 01101001 01100101 ...
B 66 010000100100 00001111 01000100 01101001 01100101 ...
l 108 011011000100 00001111 01000100 01101001 01100101 ...
u 117 011101010100 00001111 01000100 01101001 01100101 ...
m 109 011011010100 00001111 01000100 01101001 01100101 ...
e 101 011001010100 00001111 01000100 01101001 01100101 ...
  32 001000000100 00001111 01000100 01101001 01100101 ...
b 98 011000100100 00001111 01000100 01101001 01100101 ...
l 108 011011000100 00001111 01000100 01101001 01100101 ...
ü 252 111111000100 00001111 01000100 01101001 01100101 ...
h 104 011010000100 00001111 01000100 01101001 01100101 ...
t 116 011101000100
00001111
01000100 01101001 01100101 00100000 01000010 01101100 01110101 01101101 01100101 00100000
01100010 01101100 11111100 01101000 01110100
Terminator "0000" wird angefügt0100
00001111
01000100 01101001 01100101 00100000 01000010
01101100 01110101 01101101 01100101 00100000
01100010 01101100 11111100 01101000 01110100
0000
da die Bitanzahl eine 8-er-Zahl ist kommen keine "0"-Füllbits hinzuBitfolge bleibt gleich
Für Version 1 und Korrekturlevel L sind es 2 Zeichen zu wenig, also werden 2 Füllbytes angefügt
Dezimal 236 , dann 17 , nach Bedarf immer weiter so im Wechsel
0100
00001111
01000100 01101001 01100101 00100000 01000010
01101100 01110101 01101101 01100101 00100000
01100010 01101100 11111100 01101000 01110100
0000
11101100 00010001
Danach werden die Korrekturbytes (7 ECB pro Block - siehe Vorgaben)
122 129 27 175 62 242 145 als Bitfolge angefügt.
Diese erhält man mittels des Reed-Solomon-Verfahrens aus den Nachrichtenbytes
64 244 70 150 82 4 38 199 86 214 82 6 38 207 198 135 64 236 17
(diese werden aus allen bisher ermittelten Bits gebildet)
Kodierungsseite
0100
00001111
01000100 01101001 01100101 00100000 01000010
01101100 01110101 01101101 01100101 00100000
01100010 01101100 11111100 01101000 01110100
0000
11101100 00010001
01111010 10000001 00011011 10101111 00111110 11110010 10010001
Nun die Bitfolge am Stück ... und dann aufgeteilt in Bytes (zu je 8 Bits)
So werden die Bits nacheinander im QR-Code-Feld abgelegt.
01000000111101000100011010010110010100100000010 00010011011000111010101101101011001010010000001 10001001101100111111000110100001110100000011101 10000010001011110101000000100011011101011110011 11101111001010010001

01000000 11110100 01000110 10010110 01010010 00000100 00100110 11000111 01010110 11010110 01010010 00000110 00100110 11001111 11000110 10000111 01000000 11101100 00010001 01111010 10000001 00011011 10101111 00111110 11110010 10010001
Das unmaskierte QR-Bild zum Vergleich: Die Kästchen-Randlinien würden normalerweise nicht gezeichnet!
Man beginnt mit der Eintragung rechts unten und arbeitet sich auf der ersten Bahn (immer aus 2 Streifen bestehend) nach oben:
Rechts unten, nach links, nach rechts/oben (diagonal), nach links, etc. ..., nach rechts/oben (diagonal), nach links (A)
oben angekommen geht es auf der nächsten "Bahn" (wieder 2 Linien) nach unten: von (A) aus nach links, nach links, nach rechts/unten (diagonal), nach links, nach rechts/unten (diagonal), nach links, etc. ... und so immer weiter ...
QR 1L unmaskiert
Streifenweise:
Beginn rechts unten..
0100 0000 1111 0100 0100 0110   rot: nach oben
1001 0110 0101 0010 0000 0100   braun: nach unten
0010 0110 1100 0111 0101 0110
1101 0110 0101 0010 0000 0110
0010 0110 1100 1111 1100 0110 1000 - 0111 0100 0000
1110 1100 0001 - 0001 0111 1010 1000 0001 0001 1011
10101111
0011 1110
1111 0010
1001 0001
QR 1L unmaskiert
Und jetzt nochmal ...
     maskiert mit Maske 0
     für den QR-Code-Reader
QR 1L unmaskiert

Das war´s!


Beispiel 2   Byte-Modus mit Version   7 und Korrekturlevel Q

Beispiel 3   Byte-Modus mit Version 19 und Korrekturlevel M ;