En los últimos años han proliferado bastante este tipo de códigos bidimensionales. Algunos piensan que dan imagen de modernidad, aunque apenas se usan, otros piensan que ya están acabados, aunque lo cierto es que cada vez es más frecuente encontrarte con ellos, debido a que la tecnología que puede hacerles frente, NFC, no acaba de implantarse.
¿Qué es un código QR?
Un código QR (Quick Response Barcode) es un sistema para almacenar información en una matriz de puntos o un código de barras bidimensional creado por la compañía japonesa Denso-Wave en 1994, se caracterizan por los tres cuadrados que se encuentran en las esquinas y que permiten detectar la posición del código al lector.
QR proviene de Quick Response debido a la velocidad con la que se leen. En Japón son muy comunes y en los últimos años están obteniendo un nivel de reconocimiento mundial.
El auge de este tipo de códigos se ha debido principalmente al aumento del uso de smartphones, que con aplicaciones específicas nos permiten escanearlos gracias a su cámara.
Capacidad de almacenamiento y corrección de errores
La capacidad de almacenamiento de un código QR depende del tipo de datos que queramos codificar:
-
Números 7.089 caracteres
-
Alfanumérico 4.296 caracteres
-
Binario 2.953 bytes
-
Kanji/Kana 1.817 caracteres
La corrección de errores se refiere a las alteraciones que se pueden hacer al código y que éste siga siendo legible con su información original. Existen diferentes niveles de corrección de errores:
-
Nivel L 7% de las claves se pueden restaurar
-
Nivel M 15% de las claves se pueden restaurar
-
Nivel Q 25% de las claves se pueden restaurar
-
Nivel H 30% de las claves se pueden restaurar
Contenidos predefinidos
Existen algunos estándares de facto para codificar algunos tipos de información y sugerir una acción predeterminada al decodificarlos, por ejemplo con un teléfono móvil.
Los principales cotenidos predefinidos son los siguientes:
URL. Principalmente los códigos QR tienen almacenado el texto de una URL en su interior. Para codificar una URL tan sólo necesitamos añadir el texto de la URL, como por ejemplo:
https://cherinsite.esespecificando el protocolo http://, para que sea reconocido.
Cuando es leído un código con una URL la opción por defecto suele ser abrir esa dirección en un navegador.
E-mail. Para codificar una dirección de e-mail, tan sólo sería necesario indicarla, como por ejemplo mail@example.com, pero para asegurarse de que es correctamente reconocida es necesario indicar la URI de la dirección:
mailto:mail@example.comCuando es detectada una dirección de correo, la opción por defecto es abrir un mensaje vacío con la dirección a la que enviarlo.
Teléfono. Para los números de telefóno también es necesario poner su URI, el formato sería el siguiente:
tel:+34958000000La opción por defecto sería abrir la aplicación de marcado con ese número de teléfono pero sin iniciar la llamada.
SMS. En este caso también tenemos que escribir la uri del sms:
sms:600696969Cuando se lee un QR con este texto lo habitual es mostrar un sms en blanco con el número de teléfono, listo para escribir algo y enviarlo.
MMS. Este caso es similar al del sms pero con la siguiente URI:
mms:600696969
Geolocalización. También es posible indicar una posición, incluyendo la altura de cualquier punto de nuestro planeta. La posición de geolocalización se indican con la siguiente URI:
geo:37.177163,-3.591448,700Al leer un código de este tipo se debería abrir una aplicación de mapas como Google Maps y enfocar esa posición o mostrar un enlace para abrir esa posición en un navegador web.
También hay otros contenidos que son específicos para algunas plataformas. Algunos ejemplos son los siguientes:
Android Market. Se pueden construir URI´s que en dispositivos android enlacen al Market.
Para enlazar con una aplicación particular referenciando su paquete: market://search?q=pname:com.google.zxing.client.android, pero en el formato correcto:market://search?q=pname%3Acom.google.zxing.client.android
Configuración de Red Wifi en Android
Android es el único que implementa esto por el momento, el formato es el siguiente:WIFI:T:WPA;S:mired;P:mipass;donde:
T es el tipo de autenticación, puede ser WEP o WPA
S es el identificar de red SSID
P es el password de la red
Generando QR Codes
La generación de códigos QR es cada vez más fácil para cualquier usuario debido a la aparición de webs y de aplicaciones que te permiten generarlos automáticamente.
Algunas alternativas webs para crear QR son (existen muchas más):
- Kaywa (Para uso no comercial)
- Invx
- QR-Planet
- Codigos-QR
Las aplicaciones de escritorio son más escasas pero también hay algunas como Qreator (para ubuntu). Donde más variedad hay es en los smartphones, yo personalmente uso QR Droid (para android), que es muy completa (también te permite leer) y muy intuitiva de usar.
Existen también diferentes librerías para que los desarrolladores las integren en sus proyectos para trabajar con código QR (librería QR Code para java, librería pyqrnative para python).
Vamos a usar la librería pyqrnative de python para generar códigos QR.
Generando QR codes en python con pyqrnative
Como sabemos Python es un lenguaje de scripting (interpretado) multiplataforma. Vamos a usar el sistema operativo debian Squeeze para realizar esta tarea.
He de decir que no domino el lenguage, pero es bastante fácil de entender, además la librería viene con un sencillo ejemplo para generar un QR, que es el que vamos a usar para crearlos.
Pongámonos manos a la obra. Instalamos las dependencias:
root@debian:/home/rafacherin# aptitude install subversion python python-dev python-setuptools libjpeg62-dev root@debian:/home/rafacherin# easy install pil
Acabamos de instalar el cliente para poder descargar de un repositorio svn, python y un paquete de python que nos permite instalar librerías de forma fácil, también instalamos el soporte para jpeg. Y a continuación instalamos la librería de python PIL.
En google code hay una pequeña librería en Python (pyqrnative), portada de javascript que genera imágenes QR a partir de PIL(Python Image Library).
Descargamos la librería pyqrnative del repositorio svn:
svn checkout http://pyqrnative.googlecode.com/svn/trunk/ pyqr
Una vez descargado, dentro del directorio src encontramos la dos ficheros, la librería QR y un fichero llamado testqr.py que contiene un ejemplo.
Vamos a editar el fichero testqr.py para generar unas cuantas imágenes:
from PyQRNative import * listas = [['https://cherinsite.es','url.jpg'],['mailto:mail@example.com','email.jpg'],['tel:+34958000000','tel.jpg'],['sms:600696969','sms.jpg'],['geo:37.177163,-3.591448,700','geo.jpg'],['market://search?q=pname%3Acom.google.zxing.client.android','market.jpg'],['WIFI:T:WPA;S:mired;P:mipass;','wifi.jpg']] for lista in listas: qr = QRCode(20, QRErrorCorrectLevel.L) qr.addData(lista[0]) qr.make() im = qr.makeImage() im.save(lista[1])
Ahora vamos a ejecutar el código para generar las imágenes:
python testqr.py
Y ya tenemos todas nuestras imágenes generadas. Los parámetros que recibe el constructor son la versión del código y el nivel de corrección antes mencionado.
Es posible que nos dé algún error similar al siguiente: ImportError: No module named PIL.
Si nos sucede esto debemos editar el fichero PyQRNative.py y cambiar la línea: from PIL import Image, ImageDraw por import Image, ImageDraw
Leyendo QR codes
La forma más habitual es leerlos usando nuestros teléfonos móviles inteligentes, gracias a la proliferación de aplicaciones para android y para IOS y la integración de cámaras.
Hay algunas webs que te permiten subir la imagen del código QR, o enviar el enlace de la imagen y te indican lo que ésta almacena en su interior. Aunque no es una forma muy usual de hacerlo, existe ésta posiblidad usando por ejemeplo zxing (de google).
jirzhr
bfdf8i
No nos engañemos, NFC mola más. Aunque sí que está costando…
Totalmente de acuerdo, los últimos terminales móviles casi todos lo incorporan, lo mejor de NFC es la posiblidad de una comunicación bidireccional, lo que nos aporta un abanico de aplicaciones mucho mayor. El tiempo nos dirá que sucede, aunque parece que puede tener un gran futuro como método de pago en nuestros smartphones. En el siguiente artículo nos hablan un poco de NFC.