A vCard (.vcf) is the standard text format for exchanging contact details, defined across three spec versions: 2.1, RFC 2426 (3.0) and RFC 6350 (4.0). Small format mistakes — a missing VERSION, an FN property that’s required but absent, or an encoding label that’s valid in one version but not another — can cause contacts to import partially or with garbled characters. This validator checks a card against the rules for its declared version so you can catch those problems before a bulk import.
How it works
The validator first unfolds the file: per the spec, a line beginning with a space or tab is a continuation of the previous line, so those are joined back together. It then splits the text into individual BEGIN:VCARD … END:VCARD blocks and validates each one.
For every card it checks:
- Structure — a matching
BEGIN:VCARDandEND:VCARD, and a validVERSIONof 2.1, 3.0 or 4.0. - Mandatory properties —
FN(formatted name) is required in 3.0 and 4.0;N(structured name) is required in 2.1. Each property line must contain a:separating name from value. - Structured values —
Nshould have five semicolon-separated components (Family, Given, Additional, Prefix, Suffix);EMAILshould look like an address;TELshould contain digits. - Encoding and type labels —
ENCODING=QUOTED-PRINTABLEis rejected for 4.0, and bare type tokens like;HOME(2.1 style) are flagged when a 4.0 card should useTYPE=home.
Properties that aren’t part of the standard and aren’t prefixed with X- are reported as info-level notes rather than errors.
Reading the results
Each card is summarised with its version, name and property count, followed by a colour-coded list:
- Error (red) — blocks compliant import; fix before exporting.
- Warning (amber) — usually imports but is off-spec or risks interoperability problems.
- Info (grey) — non-standard or unknown properties, shown for awareness.
Tips
If accented names come through as =C3=A9-style sequences, the source was quoted-printable encoded — fine for 2.1 but a problem if the card claims to be 4.0. If a phone export won’t import cleanly elsewhere, validate it here first: a missing VERSION or unterminated card is the most common culprit. All checks run in your browser, so even sensitive address books stay on your device.