A payment QR code holds a payment address as text — a UPI ID, an IBAN, a wallet address, a PayPal name. Nothing is charged when it is made and no money moves through this page; the code simply saves the payer from typing an address by hand. That is worth stating because the typing is the part that goes wrong.
UPI → SEPA / GiroCode → Crypto → PayPal →
Everywhere else on this site, a QR code that does not scan is an inconvenience. On a payment code, a wrong character is money going to the wrong account, and there is no undo. So this is the one kind of code worth checking twice, and two of those checks can be done by a machine.
An IBAN checks itself. Every IBAN carries two check digits: move the first four characters to the end, turn letters into numbers, and the whole thing modulo 97 must equal 1. That catches a transposed pair of digits — by far the commonest typo — before anything is printed. This tool runs it as you type and refuses a code whose IBAN does not add up.
And the finished code is decoded. After the pattern is drawn, it is read back with a decoder and compared to your text character for character. It is the difference between believing the address is right and having seen it come back out.
India's UPI codes follow NPCI's linking specification. The code is a URI, and only two parts are required — the payment address and the payee name:
upi://pay?pa=jane@okhdfcbank&pn=Jane%20Doe&cu=INR
The currency is always INR. An amount is optional, and leaving it out is usually right: with no amount, the payer types what they owe, which is what a counter sticker or a poster needs. Fix an amount and every scan pre-fills that figure, which suits a single-price item and nothing else.
We cannot tell you whether a UPI ID exists — nobody can without asking a bank — so the tool checks only the shape, name@handle, and says as much rather than implying more.
The euro-area equivalent is defined by the European Payments Council in EPC069-12, and it is a stricter format than most people expect. There are no field names: the payload is a list of lines, and the position of a line is the field. Line 6 is the beneficiary, line 7 the IBAN. Put one in the wrong place and it is a different, wrong instruction.
Two constraints come from the standard rather than from anyone's preference, and this tool holds you to both:
There is no worldwide payment QR standard. There are several regional ones, and a code in the wrong format is not a bad code — it is simply not one that the phone in front of you recognises. Pick by where your payers are, not by what sounds most official.
| Format | Where it works | What the payer sees |
|---|---|---|
| UPI | India — GPay, PhonePe, Paytm, BHIM and every UPI bank app | The payment screen opens with your ID and name filled in. The amount stays editable unless their app locks it. |
| EPC / GiroCode | The euro area — most German, Austrian and Dutch banking apps; support elsewhere in the SEPA zone is patchier | A prepared transfer with the beneficiary, IBAN, amount and reference filled in, to confirm. |
| PayPal | Anywhere PayPal operates | A PayPal.me web page. It is an ordinary link, not a banking standard. |
| Crypto | Any wallet that understands the coin’s URI scheme | The send screen with your address and, if you set one, the amount. |
If your payers are in more than one of those places, print more than one code and label them. A single code cannot serve a UPI app and a German banking app, and there is no format that quietly does both.
A QR code is unreadable to a person, which is the whole appeal and, on a payment code, the whole problem. Nothing about the pattern says whose account it pays. That has made printed payment codes a standard target: someone puts their own sticker over yours, on a market stall, a car park meter, a charity collection tin or a restaurant table, and the payments go to them until somebody notices. It is common enough to have a name — quishing — and the people it works on are the ones being careful in every other way.
Three habits cover most of it, and none of them need any technology:
Our QR code scanner reads a code out of a photograph and shows the payment details as text, so you can compare a picture of the sign on the wall with what it should say. That is also worth doing before you pay a code you did not print.
Worth saying plainly, because the marketing around payment codes rarely does: the code is not a security feature. It is a faster way to type an account number, and it carries exactly the protection that typing one would — which is why the beneficiary name on the payer’s confirmation screen is doing more work than the pattern is.
A dynamic QR code does not contain your payment address at all. It contains a link to the generator's server, which redirects and counts the scan — that is what makes it editable and trackable. For a marketing poster that trade can be worth it. For a payment code it means the address someone pays is one you do not control, on a service that can change its pricing, go down, or disappear, after the sticker is on the counter.
Everything here is static. Your address is inside the pattern, so a scan goes straight to you, there is no service in the middle, nothing expires, and there is no account to keep paying for. The cost is the honest one: to change the address you print a new code.
A payment code is short, so it stays small — a UPI code with a name and no amount is usually about 29 modules across. At 30 mm wide that puts each module near 0.73 mm, comfortably above the 0.4 mm floor, and it scans from about 30 cm. For a counter sticker read at arm's length, 40–50 mm is the easier size.
Take the PDF or EPS to a printer. Both are true vectors, so the code stays exact at any size, and neither depends on a screenshot surviving a resize. Do check the printed sticker with a phone before you order five hundred of them — a software decoder agreeing is strong evidence, but a camera under shop lighting is the test that counts.
It will not upload anything, which is the reason it cannot offer some things you will see elsewhere. A payment address is not especially secret, but it is yours, and there is no reason for it to travel to a third party to be turned into a square. Nothing here leaves the browser.
It also cannot verify that an address is real, that a wallet belongs to you, or that a UPI ID is active. No generator can. If you see one claiming otherwise, it is checking the shape of the string exactly as this one does.