Standards/girocode
Girocode
Overview
Girocode is the German national branding of the pan-European epc-qr standard — the same EPC069-12 BCD-format payload, locally promoted by Die Deutsche Kreditwirtschaft (DK) under a distinct German name since 2018 [1, 2, de-cro]. It is widely used on German invoices for one-scan SEPA Credit Transfer initiation in mobile banking apps. Girocode is mandatory-compatible across all major German banks (three-pillar system: private commercial, Sparkassen, cooperatives) DE.
In strict technical terms, Girocode == EPC QR Code — there is no Germany-specific payload extension; the difference is only the branding name DK adopted to promote the standard domestically [1, 3].
History
The underlying epc-qr standard was pioneered by Austrian payment-standards body STUZZA in 2012 and published as EPC069-12 by the European Payments Council in February 2013 [3, 4, at-cro]. Country-by-country adoption followed:
| Year | Country | Brand |
|---|---|---|
| 2012 | Austria | Stuzza QR / Zahlen mit Code AT |
| 2013 | EPC publishes EPC069-12 | — |
| 2015 | Finland | EPC QR |
| 2015 | Germany | Initial Girocode availability |
| 2018 | Germany | Girocode brand actively promoted by DK [1] |
| 2016 | Netherlands, Belgium | EPC QR |
The 2018 active promotion by DK [1] marks Girocode's transition from a niche option to a mainstream invoice-payment standard in Germany — coinciding with smartphone QR-scanning capability becoming ubiquitous and the iOS Camera app gaining native QR detection.
Recent context (2024–2025) affecting Girocode's deployment landscape DE:
- 31 December 2024 — Giropay (a separate online banking redirect product, often confused with Girocode) discontinued.
- July 2024 — Wero launched in Germany (P2P first, online commerce summer 2025, NFC POS 2026). Wero is an EPI (European Payments Initiative) product positioned to gradually replace several legacy national payment instruments — though Girocode for invoice payment remains active.
- January 2025 / October 2025 — SEPA Instant Credit Transfer mandatory receiving / sending dates in Germany. SEPA Instant on the rail behind Girocode means scanned-invoice payments now settle in seconds rather than next day DE.
Technical specification
Girocode uses the identical BCD (Beneficiary Credit Data) payload format as the pan-European epc-qr standard [3, 4]. The payload is plain text with 11 newline-separated fields:
| # | Field | Max length | Required |
|---|---|---|---|
| 1 | Service Tag | 3 | Yes — always BCD |
| 2 | Version | 3 | Yes — 001 or 002 |
| 3 | Character set | 1 | Yes — 1–8 (1 = UTF-8) |
| 4 | Identification | 3 | Yes — always SCT (SEPA Credit Transfer) |
| 5 | BIC | 11 | Mandatory in v001; optional within EEA in v002 |
| 6 | Beneficiary name | 70 | Yes |
| 7 | IBAN | 34 | Yes |
| 8 | Amount | 12 | Optional, format EUR<value> |
| 9 | Purpose code | 4 | Optional, ISO 20022 purpose codes |
| 10 | Structured reference (RF) | 35 | Optional (mutually exclusive with field 11) |
| 11 | Unstructured remittance info | 140 | Optional (mutually exclusive with field 10) |
QR symbology [epc-ref]:
- Underlying symbology: qr-code (ISO/IEC 18004)
- Error correction level: M (mandated)
- Maximum QR version: 13 (i.e. ≤ 331 bytes of payload)
- Encoding mode: Byte
Sample German Girocode payload DE:
BCD
002
1
SCT
DEUTDEFF
Max Mustermann GmbH
DE89370400440532013000
EUR150.00
RINV
Rechnung Nr. 12345
German IBAN structure DE:
DE + 2 check digits + 8-digit bank code + 10-digit account number
Example: DE89370400440532013000 (22 characters)
Common German BICs DE:
- Deutsche Bank:
DEUTDEFF - Commerzbank:
COBADEFF - DZ Bank:
GENODEFF
Use cases
Girocode is invoice-payment infrastructure — single-purpose by design, but the deployment surface in Germany is broad DE:
- Printed utility bills — electricity, gas, telecom, internet invoices. Pre-printed Girocode on the invoice; consumer scans with banking app camera.
- Government and tax notices — federal Steuerbescheide (tax assessments), municipal fees (Gebühren), social-insurance contributions.
- Donation requests — NGOs, religious organisations, charities print Girocode on flyers and mailings.
- Health insurance and other recurring billers — premium reminders carry Girocode.
- B2B supplier invoices — printed or PDF invoices with Girocode payable in one scan, often using SCOR structured reference (RF format) for accounting matching [3].
- POS-adjacent use cases — some German cash registers print Girocode on receipts for split-the-bill / pay-later workflows; relatively niche compared to invoice usage.
German banking-app coverage DE:
- Sparkasse app — most-downloaded German banking app (9M+ downloads); Girocode scan + Photo Pay (camera scan of paper invoices).
- Deutsche Bank app — Smart Transfer with camera; Girocode scan + photo capture of PDF/JPG invoices.
- Commerzbank, VR Banking (Volksbanken/Raiffeisenbanken), ING Germany, N26 — all support Girocode scan natively.
Photo Payment is a German-specific adjacent capability: bank apps that scan paper invoices using OCR (not Girocode QR specifically) — useful for invoices issued before Girocode adoption. Photo Pay and Girocode coexist in the same banking-app UI DE.
Implementations
Girocode shares the epc-qr implementation ecosystem — any EPC-QR library generates Girocode-compatible payloads.
Encoder libraries:
- JavaScript — d13nde/EPC-GiroCode — JavaScript Girocode generator [5].
- Python — Segno — high-quality QR library with
segno.helpers.make_epc_qr()helper that produces a Girocode/EPC-QR payload [6]. - PHP — smhg/sepa-qr-php — 51★, 2020 — generates SEPA / EPC QR codes (Girocode-compatible) [7].
- PHP — RikudouSage/QrPaymentEU — broader EU payment library including Girocode [8].
- .NET — DevExpress XtraReports ships
QRCodeEPCGeneratoras a barcode component [9].
German-specific tooling:
- easybill, billbee, lexware, Datev and other German billing/accounting software packages generate Girocode on invoices automatically [1].
- Hosted generators — girocodegenerator.com and similar German-language services [1].
Bank apps (canonical production scanning implementations) — see Use cases section above DE.
Comparison
vs. epc-qr (pan-European parent standard) — Strictly identical at the payload level. Girocode is a German brand for EPC QR, not a technical variant. The same Girocode payload is readable by Austrian Stuzza-QR-aware apps, Finnish bank apps, etc. The branding choice was DK's marketing decision to make the German payment landscape more recognisable to consumers [1, 3, at-cro].
vs. swiss-qr-bill (Switzerland's national invoice QR) — Both serve the invoice-payment niche in DACH (German-speaking Europe) but with markedly different design choices. Swiss QR-bill uses an ISO 20022 pain.001-derived payload with 31–34 fields including QRR 27-digit reference and structured billing-info; Girocode uses an 11-field BCD payload (much simpler) [ch-cro, 3]. Switzerland is non-EU and built its own; Germany adopted the pan-European one. Both standards are used heavily in the German-speaking world but for different countries.
vs. hub3 (Croatia's invoice barcode) — Different symbology entirely: HUB3 uses pdf417 not qr-code. HUB3 is mandatory in Croatia for domestic payment slips; Girocode is non-mandatory in Germany but de facto universal [hub3-ref].
vs. earlier German alternatives:
- Photo Payment / Smart Transfer — German banks' OCR-scanning of paper invoices. Coexists with Girocode in the same banking-app UI; Photo Pay handles invoices without Girocode, Girocode is the structured fast path when present DE.
- Bezahlcode (older German alternative, mostly superseded) — a pre-EPC QR-payment proposal from the early 2010s with its own format, never gained traction once EPC QR / Girocode arrived.
Fun facts
The "Girocode" brand name reflects a deliberate alignment with Germany's existing Girokonto (current/checking account) terminology — making the standard immediately legible to German consumers as "the QR code for your Giro account" [1]. Most other countries kept the EPC QR name; Germany localised the branding.
The standard is technically identical to Austria's Stuzza QR AT — a German consumer scanning an invoice from an Austrian supplier in their German banking app gets the same auto-populated SEPA Credit Transfer experience as scanning a domestic Girocode. The pan-European single-format was the explicit EPC design goal.
Germany's three-pillar banking structure (private commercial banks, Sparkassen savings banks, Volksbanken/Raiffeisenbanken cooperatives) historically slowed payment-standard adoption — every change required consensus across three sub-sectors with different governance DE. Girocode's cross-pillar promotion by DK starting 2018 was a notable demonstration that consensus was achievable; all three pillars' apps support Girocode scanning today DE.
Status
Active, widely deployed. Most recent context DE:
- All major German banks (across the three-pillar system) support Girocode scanning in their apps
- Actively promoted by Die Deutsche Kreditwirtschaft (DK) since 2018
- Used by all major billing categories (utilities, government, B2B, donations)
- Underlying SEPA Credit Transfer rail now settles instantly via SEPA Instant (mandatory in Germany Jan / Oct 2025) DE
- 1 300+ German institutions offering SEPA Instant (highest in Europe) — improves Girocode-initiated transfer settlement speed DE
Future trajectory DE:
- Wero (European Payments Initiative, launched in Germany July 2024) may eventually overlap Girocode's invoice-payment niche — Wero's QR code feature is on the 2025 / 2026 roadmap. No formal Girocode deprecation planned; the two are expected to coexist for the medium term.
- EPC QR specification continues to evolve (current v2.10, June 2024) — Girocode tracks the latest revision automatically as a re-brand rather than a fork [epc-ref].
Sources
- Girocode-EPC-Standard erklärt — girocodegenerator.com
- EPC-QR-Code/GiroCode — easybill
- EPC QR code — Wikipedia
- EPC069-12 Quick Response Code Guidelines — EPC
- d13nde/EPC-GiroCode — GitHub
- EPC QR Codes — Segno docs
- smhg/sepa-qr-php — GitHub
- RikudouSage/QrPaymentEU — GitHub
- EPC QR Code Generator — DevExpress XtraReports
- Girocode — Wikipedia (Deutsch)
- DE-germany.md
Deployments
Found in the following country reports (grep across reports/countries/):
- DE — DE-germany.md