[GELÖST] qrencode für Schweizer Rechnungs-QR-Code

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
JamesByrnes
Beiträge: 119
Registriert: 24.11.2021 11:11:04

[GELÖST] qrencode für Schweizer Rechnungs-QR-Code

Beitrag von JamesByrnes » 23.02.2022 11:05:05

Hallo Liste,

die Schweiz erwartet von uns, unsere Rechnungen mit einem speziell spezifizierten QR-Code auszustatten.
Ich bekomme dafür von der Buchhaltung eine CVS-Datei pro Rechnung mit beispielsweise diesem Inhalt
SPC
0200
1
CH438390200SA31291AC
S
Example GmbH

9015
St.Gallen
CH

352.25
CHF
S
BellaChiquek SA
Bergalle
26
2502
Biel
CH
QRR
600022029252509093648000002

EPD
Mittels qrencode lässt sich ganz einfach die jeweilige Bilddatei als QR-Code erzeugen:

Code: Alles auswählen

qrencode --type=png --size=5 -o QR-022251509.png -l H -r 022251509.csv
Allerdings erwartet die Schweiz Ihr 7mm x 7mm großes Schweizer Kreuz mittig in den QR-code als Logo.

Kann das mit Hilfe qrencode direkt erzeugt werden, oder geht das nur über imagemagic-Tools?

Grüße

James
Zuletzt geändert von JamesByrnes am 23.02.2022 16:34:08, insgesamt 1-mal geändert.

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: qrencode für Schweizer Rechnungs-QR-Code

Beitrag von MSfree » 23.02.2022 11:25:35

JamesByrnes hat geschrieben: ↑ zum Beitrag ↑
23.02.2022 11:05:05
Allerdings erwartet die Schweiz Ihr 7mm x 7mm großes Schweizer Kreuz mittig in den QR-code als Logo.

Kann das mit Hilfe qrencode direkt erzeugt werden, oder geht das nur über imagemagic-Tools?
"Dekorationen" wie das schweizer Kreuz sind eigentlich "Beschädigungen" am QR-Code. Da der QR-Code aber je nach gewählter Fehlerkorrektur solche Beschädigungen beheben kann, bekommt man dennoch den korrekten Inhalt beim Scannen des Codes ausgelesen.

qrencode kann allerdings nur unbeschädigte QR-Codes erzeugen. Das Bild kann also nur nachträglich "kaputt" gemacht werden, wozu man dann wohl am besten imagemagick nimmt.

JamesByrnes
Beiträge: 119
Registriert: 24.11.2021 11:11:04

Re: qrencode für Schweizer Rechnungs-QR-Code

Beitrag von JamesByrnes » 23.02.2022 11:33:56

MSfree hat geschrieben: ↑ zum Beitrag ↑
23.02.2022 11:25:35
"Dekorationen" wie das schweizer Kreuz sind eigentlich "Beschädigungen" am QR-Code. Da der QR-Code aber je nach gewählter Fehlerkorrektur solche Beschädigungen beheben kann, bekommt man dennoch den korrekten Inhalt beim Scannen des Codes ausgelesen.

qrencode kann allerdings nur unbeschädigte QR-Codes erzeugen. Das Bild kann also nur nachträglich "kaputt" gemacht werden, wozu man dann wohl am besten imagemagick nimmt.
Hilft aber nichts, die Schweizer Regierung will das so https://www.paymentstandards.ch/dam/dow ... ill-de.pdf, wie auf den Seiten 38-39 beschrieben.

Ich bin am Überlegen, das Ganze als SVG zu erstellen, dann mit Bordmitteln auf die 45x45 mm zu skalieren, um danach mit "magick composite -gravity center" das Kreuz einzufügen.

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: qrencode für Schweizer Rechnungs-QR-Code

Beitrag von MSfree » 23.02.2022 12:01:09

JamesByrnes hat geschrieben: ↑ zum Beitrag ↑
23.02.2022 11:33:56
Hilft aber nichts, die Schweizer Regierung will das so.
Ich hoffe aber, daß es hilft, daß ich dir erklärt habe, warum das mit qrencode nicht direkt funktionieren kann.

Ich würde aber, wenn man schon gezielt den QR-Code "beschädigen" muß, eine hohe Fehlerkorrektur bei der Erzeugung des Codes auswählen, damit garantiert ist, daß die Fehlerkorrektur den Inhalt auf jeden Fall wiederherstellen kann.
Ich bin am Überlegen, das Ganze als SVG zu erstellen, dann mit Bordmitteln auf die 45x45 mm zu skalieren, um danach mit "magick composite -gravity center" das Kreuz einzufügen.
Ich würde das nicht auf SVG-Basis machen. Ich würde mir ein GIF mit dem Kreuz bauen und dieses dann auf den QR-Code mit imagemagick stanzen. GIF deshalb, weil es auch Transparenz kann. Man setzt alle zum Kreuz gehörenden Pixel auf intransparent, der Rest wird transparent, dadurch kann imagemagick entscheiden, weilch Pixel es übermalen soll und welche unangetastet bleiben sollen.

Benutzeravatar
hikaru
Moderator
Beiträge: 13896
Registriert: 09.04.2008 12:48:59

Re: qrencode für Schweizer Rechnungs-QR-Code

Beitrag von hikaru » 23.02.2022 12:16:01

MSfree hat geschrieben: ↑ zum Beitrag ↑
23.02.2022 12:01:09
Ich würde aber, wenn man schon gezielt den QR-Code "beschädigen" muß, eine hohe Fehlerkorrektur bei der Erzeugung des Codes auswählen, damit garantiert ist, daß die Fehlerkorrektur den Inhalt auf jeden Fall wiederherstellen kann.
Die Fehlerkorrekturstufe ist in Punkt 5.1 mit "M" spezifiziert. Hier besteht also kein Spielraum.

@JamesByrnes :
Dein im Eingangsbeitrag erzeugter QR-Code hat Fehlerkorrekturstufe "H", wäre also spezifikationswidrig.

JamesByrnes
Beiträge: 119
Registriert: 24.11.2021 11:11:04

Re: qrencode für Schweizer Rechnungs-QR-Code

Beitrag von JamesByrnes » 23.02.2022 14:35:31

MSfree hat geschrieben: ↑ zum Beitrag ↑
23.02.2022 12:01:09
Ich hoffe aber, daß es hilft, daß ich dir erklärt habe, warum das mit qrencode nicht direkt funktionieren kann.
Ja, das hat geholfen.
hikaru hat geschrieben: ↑ zum Beitrag ↑
23.02.2022 12:16:01
MSfree hat geschrieben: ↑ zum Beitrag ↑
23.02.2022 12:01:09
Ich würde aber, wenn man schon gezielt den QR-Code "beschädigen" muß, eine hohe Fehlerkorrektur bei der Erzeugung des Codes auswählen, damit garantiert ist, daß die Fehlerkorrektur den Inhalt auf jeden Fall wiederherstellen kann.
Die Fehlerkorrekturstufe ist in Punkt 5.1 mit "M" spezifiziert. Hier besteht also kein Spielraum.

@JamesByrnes :
Dein im Eingangsbeitrag erzeugter QR-Code hat Fehlerkorrekturstufe "H", wäre also spezifikationswidrig.
Stimmt, danke, das hatte ich übersehen.

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: [GELÖST] qrencode für Schweizer Rechnungs-QR-Code

Beitrag von eggy » 23.02.2022 16:54:46

von https://pypi.org/project/qrcode/ zusammengestückelt:

Code: Alles auswählen

import qrcode
from qrcode.image.styledpil import StyledPilImage

qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_L)
qr.add_data('Some data')
img = qr.make_image(image_factory=StyledPilImage, embeded_image_path="/tmp/image.png")
img.save("some_file1.png")

Antworten