Skip to content
QR codes

QR code generator: URL, Wi-Fi, vCard, SEPA wire transfer

Generate QR codes for URLs, Wi-Fi networks, vCard contacts, plain text and SEPA wire transfers in EPC069-12 format, the EU standard read natively by the apps of European banks. Inline MOD-97 IBAN validation for payment QRs, configurable error correction up to 30% to support a center logo, export to PNG for web and SVG for professional print. The generated QR is a static payload, with no redirect: readable forever, independent from the survival of any third-party shortener or proxy domain.

QR code type
Error correction / Size (px)
Center logo (optional)

When you add a logo the ECC level is set to H automatically to tolerate the central occlusion.

Preview

History (max 10)

How to generate a QR code

  1. 1

    Pick the type

    URL for links, Wi-Fi to share network access, vCard to exchange contacts, SEPA for a pre-filled wire transfer readable by EU banking apps, plain text for any arbitrary payload.

  2. 2

    Fill the fields

    Wi-Fi needs SSID, password and security type. vCard needs a name plus at least one contact channel. SEPA needs the beneficiary and IBAN; the tool validates the IBAN with a MOD-97 check before generating the QR.

  3. 3

    Set error correction

    L (7%) for QRs displayed on high-DPI screens, M (15%) is the sensible default, Q (25%) if you plan to overlay a logo at the center (the redundancy covers the masked area), H (30%) for QRs printed on materials subject to wear (labels, packaging).

  4. 4

    Export

    PNG for web and basic print, SVG for professional print (vector, scalable to any DPI). Both formats are generated directly in your browser and downloaded straight to your machine.

Three details that make a difference

Static payload, no redirect. The content lives entirely inside the QR: no proprietary shortener in the chain, no third-party domain acting as intermediary. If you set https://yoursite.com/landing as the payload, the QR contains exactly that URL and will keep pointing there ten years from now. Generators that route through their own domain create an implicit dependency: if that domain changes hands or disappears, all the printed QRs stop working. On materials with long lifecycle (labels, packaging, printed brochures, trade-show flyers) this is the difference between an amortized investment and a sunk cost.

SEPA EPC069-12 supported natively. The EPC Quick Response Code Guidelines (current version 002, technical identifier EPC069-12) is the EU standard for SEPA wire transfer QRs. The apps of major European banks (Italy, Germany, Austria, Belgium, Netherlands) read this format and pre-fill beneficiary, IBAN, amount and remittance info. The tool validates the IBAN with MOD-97 inline before generating the QR, so you don't end up printing codes with non-existent or mistyped IBANs.

Privacy by default on the payload. The QR computation happens directly in the browser. The payload (URL, Wi-Fi password, beneficiary IBAN, vCard data) is not transferred to any external service: the PNG or SVG file you download is generated locally, identical to what you would obtain by calling the same rendering library offline. Particularly relevant for SEPA payment QRs, where the IBAN is a personal financial datum.

SEPA wire transfer QR (EPC069-12) for European banks

The SEPA EPC069-12 wire transfer QR is a structured text payload, with a 331-byte hard cap, organized in fixed lines in this order: identifier (BCD), version (002), encoding (1=UTF-8), function (SCT=SEPA Credit Transfer), BIC (optional), beneficiary name (max 70), IBAN, amount (EUR + decimals with dot), purpose code, creditor reference, remittance information (max 140), beneficiary note.

All major European banking apps under PSD2 Open Banking read this format. Typical use case: issuing an invoice with a QR that the customer points their banking app at and gets a pre-filled wire transfer, dramatically cutting transcription errors (a wrong IBAN is one of the top reasons for bounced wires). The tool validates the IBAN with a MOD-97 check (ISO 13616 standard) before producing the QR, so you never end up printing QRs with non-existent IBANs.

Glossary

Technical terms used on this page, briefly explained.

Error Correction Level (ECL) #
Four levels defined by ISO/IEC 18004: L (~7% bytes recoverable), M (~15%), Q (~25%), H (~30%). Higher level means more modules (pixels) for the same payload, hence a bigger QR.
EPC069-12 #
Technical identifier of the EPC Quick Response Code Guidelines, the EU standard for SEPA wire transfer QRs. De-facto standard in Italy, Germany, Austria, Belgium, the Netherlands.
MOD-97 #
IBAN check algorithm defined by ISO 13616: the number formed by the leading two letters (country code), two check digits and the Basic Bank Account Number, modulo 97, must equal 1. Reliable detection of single-character transcription errors.
vCard 4.0 #
Standard format for contact exchange, defined by RFC 6350. Current version, supported by iOS, Android, Outlook. vCard 3.0 (RFC 2426) is still around but deprecated.
WPA-PSK QR string #
Format for Wi-Fi QRs: WIFI:T:WPA;S:<ssid>;P:<password>;H:<true|false>;;. Special characters in the payload (backslash, double quotes, semicolon, comma, colon) must be escaped with a backslash.

Frequently asked questions

Will the SEPA QR work with my European bank?
Yes if your bank participates in the EPC SEPA Quick Response Code initiative. Italian banks with confirmed support: Intesa Sanpaolo, Unicredit, BPER, MPS, BNL, Banco BPM, Credit Agricole Italia, Poste Italiane (BancoPosta), Fineco, Mediolanum. Across the EU: Sparkassen and Volksbanken (DE), Erste and Raiffeisen (AT), KBC and BNP Paribas Fortis (BE), ING (NL). Quick test: generate a QR for 1 EUR to your own IBAN, scan it from your banking app, see if it pre-fills the fields.
Can I add a logo at the center of the QR?
Yes. The tool supports uploading a logo (PNG, JPG or SVG, max 200 KB) which is overlaid at the center of the QR. Error correction is automatically raised to level H (30%), the value required by ISO/IEC 18004 to allow a masked area without compromising readability. Alternatively, by generating the QR without the logo and exporting to SVG, you can overlay the logo manually in Figma or Inkscape.
Does the Wi-Fi QR work on iOS?
Yes, since iOS 11 (2017) the native camera recognizes it and prompts to join the network with one tap. Same behavior on Android 10+ via Google Lens. Older devices need third-party scanner apps. Watch for special characters in passwords (quotes, backslash, comma, colon, semicolon): the tool escapes them properly with backslash, but some apps parse imperfectly and may ask you to re-enter the password manually.
What is the maximum payload size in bytes?
Depends on error correction level and charset. Pure digits: 7089 max chars at ECL=L. Alphanumeric: 4296 max. Arbitrary bytes (UTF-8 text): 2953 max. Kanji: 1817 max. Important caveat: the bigger the payload, the denser the modules, the harder to read on low-DPI prints. Stay below 300-500 bytes for QRs scanned from mobile cameras.
How can I test a generated QR without printing it?
Yes. The fastest way is to point your phone camera at the screen: if the app recognizes the payload and proposes the right action (open URL, join Wi-Fi, pre-fill wire transfer), the QR is valid. For scriptable or batch testing, ZBar provides a CLI decoder for Linux that works entirely locally, without uploading the file. For occasional testing of sensitive QRs (SEPA payments, corporate Wi-Fi passwords), avoid online decoders that upload the file.
Does it generate micro-QR or alternative QR formats?
Only standard ISO/IEC 18004 QRs (versions 1-40, from 21x21 up to 177x177 modules). More compact formats like Micro QR (M1-M4) and rMQR are optional in the spec, supported by few apps; we leave them out to avoid compatibility issues. QR Code Model 1 (legacy) likewise: zero modern use cases.
Can I generate batch QRs from a list (e.g. CSV)?
Not in this version. For batch workflows we recommend the Python qrcode package (PyPI) or node-qrcode from the CLI: 5-10 lines of code process an entire CSV. If you have a specific business case (e.g. unique QRs for thousands of products with tracking) it is one of the integrations I take on as a consultant.
Does the generated QR expire?
Never. The QR is a static payload: the content lives entirely inside the QR itself, with no redirect through an intermediate server. Print it on a leaflet today, it will be readable ten years from now. This is exactly why the tool avoids shorteners and tracking redirects: they would tie the QR's survival to that of a third-party domain.
Can I change the color or style of the QR?
Not yet, the rendering is plain black on white. ISO/IEC 18004 recommends >= 40% contrast between modules and background, with dark modules on a light background (or the other way round). Inverted colors, gradients, rounded modules make the QR less robust under suboptimal scanning conditions. If you need advanced styling, import the SVG into Figma or Illustrator and customize there (keep the contrast).

Who builds these tools?

Maurizio Fonte, senior IT consultant with 20+ years in PHP, Laravel, unmanaged Linux infrastructure, applied cybersecurity and AI/LLM integration. Production backends, legacy code modernization, security audits, custom AI agents and MCP servers: the work behind every tool published here.

About Maurizio Fonte