Generador de QR vCard para contactos: el spec VCARD por campos
Un QR vCard es una tarjeta de contacto que el móvil guarda de un toque. El formato es RFC 6350 vCard 4.0 y la 3.0 de 2011, ambas en uso activo, y todo el trabajo es respetar el orden de los campos y los saltos de línea.
La vCard mínima, línea a línea
Los móviles reconocen la vCard por la primera línea literal BEGIN:VCARD. Un contacto válido se ve así:
BEGIN:VCARD
VERSION:3.0
N:Lopez;Ana;;;
FN:Ana Lopez
ORG:Aldeacode
TITLE:Ingeniera Frontend
EMAIL:ana@example.com
TEL:+34600111222
END:VCARD
Campo a campo:
- VERSION declara la versión. Usa 3.0 para máxima compatibilidad, la 4.0 es más limpia pero la cámara de iOS parsea la 3.0 con menos sorpresas en 2026.
- N es el nombre estructurado: Apellido;Nombre;OtrosNombres;Prefijo;Sufijo. Los cuatro punto y coma del ejemplo son intencionales, el campo tiene cinco componentes y los vacíos también van.
- FN es el nombre de visualización, el texto que la app de contactos muestra. Siempre rellénalo.
- ORG es la organización, TITLE es el cargo.
- EMAIL y TEL son los canales. Puedes repetirlos con un tipo, por ejemplo TEL;TYPE=CELL:+34600111222, el móvil los agrupa sensatamente.
El bloque cierra con END:VCARD en su propia línea.
Cómo lo añade el móvil a contactos
La cámara de iOS y las de Pixel y Samsung en Android detectan el prefijo BEGIN:VCARD y muestran una hoja "Añadir a Contactos" con todos los campos rellenos. El usuario revisa y toca Guardar. Sin app, sin portapapeles.
En Android antiguos el camino es el mismo en cuanto corre un escáner QR, el parseo es idéntico. Navegadores tipo Chrome en iOS que leen la cámara llevan a una descarga .vcf que la app Contactos importa.
La trampa del CRLF
El RFC 6350 dice que las líneas terminan en \r\n (CRLF). La mayoría de generadores QR emiten solo \n (LF) y un 95 por ciento de los móviles lo aceptan igual. El cinco por ciento restante suele ser BlackBerry antiguos y algunos Android corporativos con parsers estrictos.
Si tu QR funciona en iOS y falla en el dispositivo viejo de un socio, regenera con CRLF. Dentro de una cadena JavaScript significa \r\n entre cada línea. Si pegas en una herramienta, pasa el archivo por unix2dos antes de codificar.
Nombres con acentos y codificación
El charset por defecto de vCard 3.0 es UTF-8 en la práctica, aunque el spec sea ambiguo. Tildes, eñes, cirílico, CJK, todo entra dentro del QR sin problema.
Los dos fallos reales: herramientas que escapan comas dentro de FN (un FN:Lopez, Ana se vuelve FN:Lopez\, Ana y el móvil muestra la barra literal) y herramientas que parten líneas largas a 75 caracteres por RFC. El plegado está permitido pero iOS Camera en builds de 2024 a veces falla. Si dejas cada campo en una sola línea, evitas las dos.
Ejemplo completo
text# Payload vCard 3.0, funciona en cámara de iOS y escáner por defecto de Android
BEGIN:VCARD
VERSION:3.0
N:Lopez;Ana;;;
FN:Ana Lopez
ORG:Aldeacode
TITLE:Ingeniera Frontend
EMAIL;TYPE=WORK:ana@example.com
TEL;TYPE=CELL:+34600111222
URL:https://aldeacode.com
ADR;TYPE=WORK:;;Calle Mayor 12;Madrid;;28013;ES
END:VCARD ¿Solo necesitas el resultado?
Rellena los campos del contacto en el generador de QR en aldeacode.com y la herramienta arma un bloque VCARD 3.0 limpio, escapa las comas y dibuja el código, todo en tu navegador, sin subida. Imprímelo detrás de la tarjeta de visita o pégalo en el footer de la web.
Abrir Generador de Códigos QR →Preguntas frecuentes
¿vCard 3.0 o 4.0 dentro de un QR?
Quédate con 3.0 para QR en 2026. iOS, Android reciente y Outlook la parsean. La 4.0 va perfecta en escritorio pero algunas builds de la cámara de iOS muestran campos parciales si la versión es 4.0.
¿Cuánto puede medir una vCard QR antes de no escanearse?
Unos 1500 caracteres ASCII en nivel de corrección M antes de que el QR sea demasiado denso para que la cámara lo lea a distancia cómoda. Quita la foto, quita campos sobrantes, deja un teléfono y un email.
¿Puedo incluir foto de perfil?
Técnicamente sí con PHOTO;ENCODING=BASE64, en la práctica no. Una foto 100x100 lleva el QR a más de 3000 caracteres, el código se vuelve un cuadrado negro que la cámara no resuelve. Enlaza la foto con URL: en su lugar.