# QR-Code Modul

Dieses Modul bietet eine einfache API zum Generieren von QR-Codes in verschiedenen Formaten wie SVG, PNG und ASCII.

## Funktionen

- Generierung von QR-Codes in Versionen 1-40
- Unterstützung verschiedener Fehlerkorrektur-Level (L, M, Q, H)
- Automatische Versionsauswahl basierend auf Datenmenge
- Vollständige Reed-Solomon-Fehlerkorrektur-Implementierung
- Export als SVG, PNG oder ASCII-Art
- Anpassbare Modulgröße und Ränder
- Anpassbare Farben für SVG-Output

## Beispiele

### Einfache Verwendung

```php
// QR-Code als SVG generieren
$qrCodeService = new QrCodeService($qrCodeGenerator);
$svg = $qrCodeService->generateSvg('https://example.com');

// QR-Code als PNG mit benutzerdefinierten Einstellungen
$config = new QrCodeConfig(6, 8, '#000000', '#FFFFFF');
$png = $qrCodeService->generatePng('Hallo Welt!', ErrorCorrectionLevel::H, $config);
```

### Erweiterte Anpassung

```php
// Explizite QR-Code-Version angeben
$qrCode = new QrCode('Daten', ErrorCorrectionLevel::Q, new QrCodeVersion(5));
$matrix = $qrCodeGenerator->generate($qrCode);

// QR-Code als ASCII-Art ausgeben (für Debugging)
$ascii = $qrCodeService->generateAscii('Text');
echo $ascii;
```

## Architektur

Das Modul ist nach Domain-Driven Design strukturiert:

- **Entities und Value Objects**: QrCode, QrCodeVersion, ErrorCorrectionLevel, GaloisField, Polynomial, etc.
- **Services**: QrCodeEncoder, QrCodeRenderer, QrCodeGenerator, ReedSolomon, ReedSolomonEncoder
- **Patterns**: FinderPattern, AlignmentPattern, etc.

Die Trennung von Verantwortlichkeiten ermöglicht eine einfache Erweiterung und Wartung.

## Reed-Solomon-Fehlerkorrektur

Die Implementierung der Reed-Solomon-Fehlerkorrektur erfolgt in mehreren Schritten:

1. **Galois-Feld-Arithmetik**: Die `GaloisField`-Klasse implementiert die mathematischen Operationen im Galois-Feld GF(2^8).

2. **Polynom-Operationen**: Die `Polynomial`-Klasse ermöglicht Berechnungen mit Polynomen im Galois-Feld.

3. **Generator-Polynom**: Für die Fehlerkorrektur wird ein spezifisches Generator-Polynom basierend auf der gewünschten Anzahl von Fehlerkorrektur-Bytes erzeugt.

4. **Kodierung**: Der eigentliche Reed-Solomon-Algorithmus teilt die Daten in Blöcke ein, berechnet die Fehlerkorrektur-Bytes für jeden Block und interleaved die Ergebnisse.

Die Implementierung folgt dem Standard-Verfahren für QR-Codes und kann Fehler bis zur Hälfte der Anzahl der Fehlerkorrektur-Bytes korrigieren.

## Kodierungsmodi

Die Implementierung unterstützt folgende Kodierungsmodi gemäß der QR-Code-Spezifikation:

1. **Numerischer Modus**: Optimiert für Ziffern (0-9), packt jeweils 3 Ziffern in 10 Bits.
2. **Alphanumerischer Modus**: Für Ziffern, Großbuchstaben und einige Sonderzeichen, packt jeweils 2 Zeichen in 11 Bits.
3. **Byte-Modus**: Für beliebige 8-Bit-Daten, verwendet 8 Bits pro Zeichen.
4. **Kanji-Modus**: Optimiert für japanische Schriftzeichen (vereinfachte Implementierung).

Der Encoder wählt automatisch den effizientesten Modus basierend auf den Eingabedaten.

## Limitationen

- Kanji-Modus ist nur teilweise implementiert
- Strukturierte Anhänge werden nicht unterstützt
- Keine Unterstützung für Micro-QR-Codes
