Generador de códigos QR gratis: enlace, Wi-Fi, contacto, WhatsApp, correo y SMS, en PNG o SVG

Crea un código QR gratis para un enlace, tu red Wi-Fi, una tarjeta de contacto, un chat de WhatsApp, un correo, un SMS o un teléfono. Elige el tamaño, los colores y el nivel de corrección, y descárgalo en PNG para compartirlo o en SVG para imprimirlo a cualquier tamaño. El código se genera en tu navegador: no caduca, no pasa por ningún servidor y nadie cuenta cuántas veces se escanea.

Prueba el código antes de imprimirlo: escanéalo con la cámara de tu teléfono desde la pantalla. Y si es para un negocio, imprímelo de al menos 2 a 3 cm de lado, en negro sobre blanco o con buen contraste.

Cómo hacer un código QR

  1. Elige el tipo: un enlace o texto, tu red Wi-Fi, un contacto, WhatsApp, un correo, un SMS o un teléfono.
  2. Rellena los datos. El código se actualiza mientras escribes, y debajo ves exactamente lo que contiene.
  3. Ajusta el aspecto: el tamaño de la imagen, los colores y el nivel de corrección.
  4. Descárgalo. El PNG sirve para enviarlo o ponerlo en una página; el SVG es vectorial y se imprime a cualquier tamaño sin perder nitidez, ideal para carteles, menús o tarjetas.

Qué puede llevar un QR

  • Enlace o texto: la cámara ofrece abrir la dirección. Si es un texto normal, lo muestra.
  • Wi-Fi: quien lo escanee se conecta a tu red sin teclear la contraseña. Usa el formato WIFI:T:WPA;S:red;P:contraseña;;, que leen las cámaras de Android y de iPhone. Los caracteres especiales de la contraseña (; , : \ ") se escapan solos.
  • Contacto (vCard 3.0): el teléfono propone guardar el contacto con nombre, teléfono, correo, empresa y dirección.
  • WhatsApp: abre un chat contigo, con un mensaje ya escrito si quieres, mediante https://wa.me/. El número va completo con la lada del país: en México, 52 y los diez dígitos.
  • Correo, SMS y teléfono: abren la aplicación correspondiente con los datos puestos. Nada se envía hasta que la persona lo confirma.

El nivel de corrección de errores

Un código QR guarda la información repetida de forma que se puede leer aunque una parte esté sucia, rota o tapada. Hay cuatro niveles: L recupera hasta el 7 % del código, M el 15 %, Q el 25 % y H el 30 %. Más corrección hace el código más resistente, pero también más denso, con más cuadritos. M es un buen punto medio; usa Q o H si se va a imprimir en exteriores o si vas a poner un logotipo encima.

Consejos para que se lea bien

  • Contraste: módulos oscuros sobre fondo claro. Los colores sirven, pero muchos lectores no leen códigos invertidos (claro sobre oscuro). La herramienta avisa si el contraste es bajo.
  • Margen: deja el borde blanco alrededor, de 4 módulos. Lo incluyen el PNG y el SVG.
  • Contenido corto: cuanto más texto, más denso el código. Para mucha información, mejor un enlace a una página.
  • Ojo con los QR que escaneas: los estafadores pegan códigos falsos sobre los legítimos en parquímetros o restaurantes. Si un QR te lleva a pedir datos o un pago, revisa la dirección con nuestro analizador de enlaces.

Crear el contenido de un QR en Python

Lo delicado de un QR de Wi-Fi o de contacto es escapar bien los caracteres especiales. Con la biblioteca estándar:

"""El contenido de un código QR de Wi-Fi, de contacto (vCard) o de WhatsApp, con sus escapes."""
from urllib.parse import quote


def wifi(red, clave, cifrado="WPA", oculta=False):
    """Formato WIFI: de ZXing. Los caracteres \\ ; , : y " se escapan con una barra invertida."""
    esc = lambda s: "".join("\\" + c if c in '\\;,:"' else c for c in s)
    t = "nopass" if not clave else cifrado
    s = f"WIFI:T:{t};S:{esc(red)};"
    if clave:
        s += f"P:{esc(clave)};"
    if oculta:
        s += "H:true;"
    return s + ";"


def vcard(nombre, apellidos, telefono="", correo="", empresa=""):
    """vCard 3.0 (RFC 2426): , ; y \\ se escapan; las líneas terminan en CRLF."""
    esc = lambda s: s.replace("\\", "\\\\").replace(",", "\\,").replace(";", "\\;").replace("\n", "\\n")
    lineas = ["BEGIN:VCARD", "VERSION:3.0", f"N:{esc(apellidos)};{esc(nombre)};;;",
              f"FN:{esc(nombre)} {esc(apellidos)}"]
    if empresa:
        lineas.append(f"ORG:{esc(empresa)}")
    if telefono:
        lineas.append(f"TEL;TYPE=CELL:{telefono}")
    if correo:
        lineas.append(f"EMAIL:{correo}")
    lineas.append("END:VCARD")
    return "\r\n".join(lineas)


def whatsapp(numero, mensaje=""):
    cifras = "".join(c for c in numero if c.isdigit())        # con lada de país, sin + ni espacios
    return f"https://wa.me/{cifras}" + (f"?text={quote(mensaje)}" if mensaje else "")


print(wifi("Casa López", "mi;clave:segura"))
print(repr(vcard("Ana", "García, Pérez", "+52 55 1234 5678", "ana@ejemplo.com", "Taller; S.A.")))
print(whatsapp("+52 1 55 1234 5678", "Hola, ¿tienen envío?"))
$ python3 qr.pyWIFI:T:WPA;S:Casa López;P:mi\;clave\:segura;;
'BEGIN:VCARD\r\nVERSION:3.0\r\nN:García\\, Pérez;Ana;;;\r\nFN:Ana García\\, Pérez\r\nORG:Taller\\; S.A.\r\nTEL;TYPE=CELL:+52 55 1234 5678\r\nEMAIL:ana@ejemplo.com\r\nEND:VCARD'
https://wa.me/5215512345678?text=Hola%2C%20%C2%BFtienen%20env%C3%ADo%3F

Para dibujar el código, la biblioteca segno (pip install segno) no tiene dependencias: segno.make(wifi("Casa", "clave"), error="m").save("wifi.png", scale=10). Más herramientas en decodigo.com/herramientas.

El código se genera con qrcode-generator de Kazuhiko Arase (licencia MIT). Formato Wi-Fi: ZXing, «Barcode Contents»; contactos: RFC 2426 (vCard 3.0); WhatsApp: ayuda de WhatsApp sobre los enlaces wa.me. «QR Code» es una marca registrada de DENSO WAVE. La herramienta se comprobó generando 500 códigos de todos los tipos y leyéndolos con zxing-cpp, un lector independiente: todos dan exactamente el contenido esperado.