🔳 QR Codes

vCard QR Code Generator

Quick answer: Turn your contact details into a QR code that saves you straight into a phone’s address book — name, company, job title, phone, email, website and a properly structured postal address. It is built in your browser, so nothing is uploaded, and the tool decodes the finished code to confirm your details came back before you print it on anything.

A contact QR code carries a whole vCard — name, company, job title, phone, email, website and a structured postal address — as text inside the pattern. Scanning it offers to save the contact. No app, no account, and nothing to keep paying for.

Make a contact QR code → MeCard instead →

The address field is where these usually go wrong

vCard’s ADR is not free text. It is a positional value with seven components separated by semicolons, and the position is the only thing that says which field is which:

ADR;TYPE=WORK:;;120 High Street;Springfield;IL;62704;USA

SlotComponentIn the example
1Post office box(empty — deprecated)
2Extended address(empty — deprecated)
3Street120 High Street
4Locality / citySpringfield
5Region / stateIL
6Postal code62704
7CountryUSA

Generators that give you one box labelled “Address” put everything into slot 3 and leave the rest empty. The card still imports, which is why the mistake survives — but the contact arrives with a street line reading 120 High Street, Springfield, IL 62704, USA and no city, region, postcode or country at all. Sort by city later and that contact is not in the list.

This tool asks for the five parts separately and writes all seven slots. We had the one-box version ourselves until we checked it against the specification, which is a fair warning about how easy it is to get wrong.

vCard or MeCard?

Both encode a contact; they are different formats with different trade-offs, and the right answer depends on who is scanning.

vCardMeCard
FieldsEverything above, plus a structured addressName, phone, email, website
SizeLonger — more modules, denser codeShorter — a smaller, coarser code
iPhoneReliablePatchy
AndroidReliableNative

Pick vCard unless you have a specific reason not to. MeCard’s advantage is that it makes a physically smaller code, which matters when the code has to fit in a corner of a card and the payload is long.

How big to print it on a business card

This is the practical question, and it has a real answer. A full vCard is a lot of text, so the code has many more modules than a link does — and more modules in the same square means each one is smaller. The usual rule is that a module should not fall much below 0.4 mm.

Printed widthA short link (25 modules)A typical contact card
15 mm0.65 mm per moduleuncomfortably fine
20 mm0.61 mmabout the practical floor
25 mm0.76 mmthe size to aim for
30 mm0.91 mmcomfortable, if the card has room

The panel under the preview does this sum for the card you actually build, because the module count depends entirely on how much you put in. If it comes out too dense for the space, the fix is to carry less: a phone number and an email will scan from a much smaller square than a full postal address will.

Print from the PDF or EPS. Both are true vectors, so the print shop can place the code at whatever size the layout needs without a single soft edge — and soft edges are exactly what a scanner struggles with at this size.

Adding a logo, and what it really costs

A logo in the middle of a contact code is a popular request and a risky one, because a contact card is already a long payload. We swept a centre block across payload lengths and error-correction levels: at level H the largest logo that still read back covered 15.2% of the code’s area on a long payload — nowhere near the 30% that level is named for, because recovery counts codewords spread across the symbol while a logo destroys one solid block.

There is no size that is safe in general, which is why the tool does not print one. It decodes your actual code, with your actual logo, and tells you whether your details came back before you download it.

Your name is two fields, and they are not the same one

The address is the trap people notice. The name is the one they do not, because it goes wrong quietly. A vCard carries the name twice, for two different purposes:

N:Okonkwo;Ada;;;
FN:Ada Okonkwo

N is structured and positional, like the address — surname, given name, middle names, prefix, suffix, in that order. It is what an address book sorts and searches on. FN is the display name, free text, and it is what you see at the top of the contact. Write only FN and the card imports with nothing to sort by; write N with the parts the wrong way round and every phone in the room files you under your first name.

This tool asks for given and family name separately and writes both fields, in the right order, from the same two boxes. It is the same lesson as the address: a single “Name” box cannot produce a correct vCard, however tidy it looks in the form.

What a non-Latin name costs

Worth knowing if your name is not spelled in ASCII, because the obvious assumption is wrong. Accents do not make the code meaningfully bigger; length does. The same card with four different names:

NamePayloadModules across
Ada Okonkwo133 bytes49
Jürgen Müller141 bytes49
Γιώργος Παπαδόπουλος189 bytes57
田中 太郎137 bytes49

Two umlauts cost four bytes and change nothing. The Greek name jumps the code from 49 modules to 57 — not because Greek is expensive, but because that name is 19 characters and each one costs two bytes. The Japanese name costs three bytes per character and still lands at 49 modules, the same as the plain Latin one, because it is only 4 characters long. Character count matters more than the script.

The practical consequence is only that a long name in a two-byte script wants a slightly larger printed code. Nothing needs escaping or transliterating: the text is encoded as UTF-8 and comes back exactly as typed, accents and all. Some older generators quietly mangle this — a well-known library prepends a byte-order mark to any non-ASCII string, so the name that scans back is not the name you entered.

Can you put a photo in it?

Yes — and you almost certainly should not. Both halves of that are worth spelling out, because the usual answer online is a flat “it will not fit”, and we measured that to be wrong.

vCard has a PHOTO field that carries the image itself, base64-encoded, inside the payload. We built real cards with a real JPEG avatar at several sizes and read every one back with both decoders. A 128 px portrait encodes and scans perfectly well. The problem is what it does to the pattern:

PhotoModules acrossModule size at 25 mm
None570.39 mm
48 px (0.9 KB)1330.18 mm
96 px1570.15 mm
128 px1690.14 mm

A thumbnail so small you would struggle to recognise the face takes the same card from 57 modules across to 133 — because base64 inflates the image by a third before it is encoded, and the QR code then has to carry all of it. In the same printed square each module shrinks from 0.39 mm to 0.18 mm, which is well under the 0.4 mm floor that printing and scanning both start to fail at. To hold that photo and stay printable you would need a code several times the size of the card it is going on.

There is a second reason, less obvious and more annoying in practice: many address books ignore a PHOTO arriving this way, so a good proportion of the people who scan your card get the enormous code and no picture at all. The photo is paid for on every scan and delivered on some of them.

What works instead is a URL pointing at a page with your photo on it — a few dozen characters rather than a couple of thousand. The contact saves instantly, the code stays small enough to print on a card, and the picture is a tap away for anyone who wants it.

One note on the numbers above: even with no photo at all, a full card with a postal address lands at 0.39 mm per module at 25 mm, which is already at the edge. If you are carrying the complete address, give the code 30 mm rather than 25.

These do not expire, and they are not tracked

Your details are encoded into the pattern itself. There is no short link, no redirect and no account, so the code cannot be switched off, and no one collects a list of who scanned your card. Services that offer an editable “digital business card” work the other way: the code points at their server, which is what makes the destination changeable and the scans countable — and what makes the card stop working when the subscription does.

The trade is real and worth stating plainly: a static card cannot be re-pointed after it is printed. If your number changes, you print new cards, exactly as you would have before QR codes existed.

Making it is private too. Your name, phone number and home or office address are turned into a pattern by code running in your own browser — the page has no fetch, no XMLHttpRequest and no form, so there is nothing that could send them anywhere. For personal contact details that is worth more than it sounds.

Frequently Asked Questions

Technically yes, and in practice no. vCard's PHOTO field carries the image base64-encoded inside the payload, and we measured it: a 48 px thumbnail takes a full contact card from 57 modules across to 133, which at 25 mm means each module shrinks from 0.39 mm to 0.18 mm — far below the 0.4 mm that printing and scanning start to fail at. The code still decodes; it just cannot be printed at business-card size. Many address books also ignore a photo sent this way. Link to a page with your photo on it instead — a URL costs a few dozen characters rather than a couple of thousand.
Choose the Contact type, fill in your name and whichever of company, job title, phone, email, website and address apply, and the code appears as you type. Scanning it offers to save you as a contact. Nothing is uploaded — your details are turned into a pattern by code running in your own browser.
A QR code containing a vCard, the standard contact format that phones and address books already understand. It carries name, organisation, job title, phone, email, website and a structured postal address as text inside the pattern, so scanning it offers to save the contact directly rather than opening a web page first.
Because the address was written into the wrong part of the card. vCard's ADR is a positional value with seven semicolon-separated components — PO box, extended address, street, locality, region, postal code, country — and a generator that offers a single Address box puts everything into the street slot and leaves the other six empty. The card still imports, so the mistake is easy to miss; the contact simply arrives with no city, region or country. This tool asks for the parts separately and writes all seven.
vCard unless you have a reason not to. It carries more fields, including a structured address, and it is read reliably on both iPhone and Android. MeCard is shorter, so it produces a physically smaller and coarser code — useful when space on the card is tight and the details are few — but iPhone support for it is patchier.
Aim for about 25 mm square and treat 20 mm as the floor. A contact card is a long payload, so the code has many more modules than a link does, and more modules in the same square means each one is smaller; below roughly 0.4 mm per module printing and scanning both start to struggle. The panel under the preview works out the module size for the card you actually build. If it is too dense, carry fewer fields.
You can, carefully. A contact card is already a long payload, and a logo destroys a solid block of it. In our sweep the largest logo that still read back covered 15.2% of the code's area at the highest error-correction level — far less than the 30% that level is named for. Rather than guess, the tool decodes your actual code with your actual logo and tells you whether your details came back.
Not these ones. Your details are encoded into the pattern, so there is no link, redirect or account behind it and nothing that can be switched off. Services offering an editable digital business card work the opposite way — the code points at their server, which is what makes it editable and trackable, and what makes it stop working if the subscription lapses. The trade here is that a printed static card cannot be re-pointed; if your number changes, you print new cards.
It depends where the code is made. Here it is made in your browser: the page contains no fetch, no XMLHttpRequest and no form, so your name, phone number and address have no route off your machine. A generator that renders the image on its server has received all of it. You can confirm which you are using in about thirty seconds from your browser's Network tab.

Related tools