A QR code doesn't "know" it's a WiFi network or a contact — it's a grid of dots encoding plain text, and it's the camera app that recognizes a specific pattern in that text and offers "Connect" or "Add contact." Knowing the format helps you debug why a QR code isn't working, or generate one yourself without relying on a third-party app full of ads.
The format of a WiFi QR code
Behind every WiFi QR code is a string like this:
WIFI:T:WPA;S:MyHomeNetwork;P:password123;H:false;;
T is the security type (WPA/WPA2, WEP, or nopass for open networks), S is the SSID, P is the password, and H indicates whether the network is hidden. Special characters (;, ,, :, \) are escaped with \ so they don't break the format — an easy detail to miss if you build it by hand and your password contains one of those symbols.
The format of a vCard
"Save contact" QR codes encode a vCard (the standard digital business card format, usually version 3.0): text lines like FN:First Last, TEL;TYPE=CELL:+1..., EMAIL:.... Any modern smartphone's QR reader recognizes the BEGIN:VCARD ... END:VCARD block and offers to add it straight to Contacts.
What error correction (L/M/Q/H) means
Every QR code includes redundancy so it can still be read even if it's partially damaged or dirty:
- L (7%) — maximum data, minimum redundancy. Fine for screens, with no risk of dirt.
- M (15%) — the default balance for most cases.
- Q (25%) and H (30%) — for outdoor printing, labels that get handled a lot, or when you're placing a logo over the center of the code (the logo "covers" part of the data, and error correction rebuilds it).
More correction means a denser code — with long text (a vCard with many fields) at level H, the QR can become hard to scan at small sizes. For short text there's no real cost to going higher; for long payloads, try M first.
Generate them without friction
Create your network QR at the WiFi QR generator, a contact one at the vCard QR generator, or a calendar event at the event QR code — all three build the correctly formatted text for you. For anything else (a URL, free text), use the general QR code generator with whatever correction level you need.

