¿Es posible crear un código QR usando texto?

¿Es posible crear un código QR usando texto?

Los códigos QR que he visto son en su mayoría archivos de imágenes. ¿Pero puedes crear códigos QR usando texto sin formato?

Por ejemplo, ASCII y UTF-8 tienen cuadros negros como caracteres. ¿Puedo usarlos junto con espacios para crear un código QR?

Respuesta1

¡Sí! Hay una utilidad llamadaqrencodeque puede renderizarlos por usted.

El único factor realmente importante para un código QR es que la matriz 2D tenga "más oscuro" y "más claro"píxeles/segmentos. También se puede colorear, aunque el contraste puede empezar a ser un problema.

ASCII

Su capacidad para leer este código QR probablemente dependerá de la resolución de la cámara, la distancia y el software que esté utilizando.

qrencode -t ASCIIi 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'

Nota: utilicé -t ASCIIi(ASCII invertido) porque mi terminal es blanco sobre negro.

Código QR ASCII

ANSI

Este modo funciona configurando el color de fondo en blanco o negro e imprimiendo una cantidad de caracteres de espacio.

qrencode -t ANSI 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'

Código QR ANSI

Algunos de los caracteres sin formato escritos en el terminal se muestran a continuación, estos sonCódigos de escape ANSI. Un "escapar"el carácter tiene un valor de 0x1by, a menudo, se puede escribir como \e.

  • \e[40mestablece el color de fondo en negro
  • \e[47mestablece el color de fondo en blanco
  • 0x20es un espacio ASCII

Código QR ANSI sin procesar

UTF-8

También existe un modo UTF-8 ( -t UTF8). Este modo utiliza el "media cuadra"caracteres para aumentar la densidad y reducir el número de líneas a la mitad.

  • ▀ - U+2580 / Mitad bloque superior
  • ▄ - U+2584 / Medio bloque inferior
  • █ - U+2588 / Bloque completo

Captura de pantalla de @grawity (gracias)

qrencode -t UTF8 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
qrencode -t ANSIUTF8 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'

Código QR UTF-8

Respuesta2

La respuesta de Attie qrencodees excelente, pero por alguna razón siempre genera un código qr con colores invertidos que mi aplicación Barcode Scanner no puede leer.

Invertir la salida UTF-8 no es trivial, así que pensé en dejarlo aquí para otros;)

qrencode=`qrencode -t UTF8  "https://superuser.com/q/1420001/551559"`
echo "${qrencode}"

# replace black
qrencode=$(echo "${qrencode}" | sed s/`echo -e '\xe2\x96\x88'`/A/g)
echo "${qrencode}"

# replace white
qrencode=$(echo "${qrencode}" | sed s/\ /B/g)
echo "${qrencode}"

# swap black for white
qrencode=$(echo "${qrencode}" | sed s/A/\ /g)
echo "${qrencode}"

# swap white for black
qrencode=$(echo "${qrencode}" | sed s/B/`echo -e '\xe2\x96\x88'`/g)
echo "${qrencode}"

# replace "Upper Half Block"
qrencode=$(echo "${qrencode}" | sed s/`echo -e '\xe2\x96\x80'`/A/g)
echo "${qrencode}"

# replace "Lower Half Block"
qrencode=$(echo "${qrencode}" | sed s/`echo -e '\xe2\x96\x84'`/B/g)
echo "${qrencode}"

# swap upper for lower
qrencode=$(echo "${qrencode}" | sed s/A/`echo -e '\xe2\x96\x84'`/g)
echo "${qrencode}"

# swap lower for upper
qrencode=$(echo "${qrencode}" | sed s/B/`echo -e '\xe2\x96\x80'`/g)
echo "${qrencode}"

Utilizo esto para poder firmar criptográficamente un mensaje de texto plano utf-8 con un código qr y mostrarlo en mi sitio web en html.

Para lograr esto sin que HTML rompa la legibilidad del código QR con el interlineado, puse el código QR dentro de un <pre>bloque con estilos CSS de la siguiente manera:

<pre style="line-height:1em; letter-spacing: -1px; font-size: x-large;">
...
</pre>

Para ver un ejemplo en vivo, consulte

información relacionada