What a vCard contains
A vCard is plain text made of labeled lines, opened by BEGIN:VCARD and closed by END:VCARD. Each line holds one property, such as the formatted name, a phone number or an email address. The same text is what a .vcf file holds when contacts are exported from a phone or email program.
A minimal vCard 3.0 for a QR code looks like this, one property per line: BEGIN:VCARD, VERSION:3.0, N:Lee;Jordan, FN:Jordan Lee, ORG:Maple Street Bakery, TEL:+15035550123, EMAIL:jordan@example.com, URL:https://example.com, END:VCARD. N holds the structured name (family name first, separated by semicolons) and FN the name as it should be displayed.
- N: structured name (family;given;middle;prefix;suffix)
- FN: display name
- TEL: phone number, ideally in international format
- EMAIL: email address
- ORG: company or organization
- TITLE: job title
- URL and ADR: website and postal address
Which version to use
Version 3.0 is still the safest choice for QR codes because almost every phone reads it. It is defined in RFC 2426 from 1998. Version 4.0, defined in RFC 6350 in 2011, is the current standard and requires UTF-8, but some older readers handle it less consistently.
Version 3.0 expects both N and FN, while 4.0 requires only FN. Whichever version is used, the VERSION line should come right after BEGIN:VCARD.
Size and scanning trade-offs
Every field added to a vCard adds characters, and more characters mean a denser QR code with smaller modules. A card with a name, one phone number and one email scans easily even at business-card size. Adding a postal address, several numbers, a long note or an embedded photo can push the code to a version that needs to be printed much larger.
Photos are the usual problem: a base64-encoded image can run to thousands of characters and rarely fits in a practical code. A common alternative is to encode a short link to a hosted .vcf file or contact page, which keeps the code small and lets the details change later.