Generar códigos QR con PHP

Hoy voy a hablar de una librería en PHP que ya llevo tiempo utilizando para generar códigos QR; me refiero a PHP QR Code.

Comencé a utilizar dicha librería cuando me pidieron un proyecto que llevara una firma digital “como las del SAT”. Tras comentarle a la líder del proyecto todo lo que llevaba implementar un verdadero sistema de firmas digitales, sumado a que -de verdad- la mayoría de usuarios tiene un escaso nivel técnico al grado de que no iban a ser capaces de generar sus archivos .key y .req por cuenta propia. La líder del proyecto y yo decidimos aplicar la vieja confiable: “Por lo mientras pónle (al documento que genera el sistema) un código de barras o algo, el chiste es que se vea que ya se va a empezar a implementar lo de las firmas electrónicas”, me dijo (ese “por lo mientras” lleva casi 6 años, pero esa, es otra historia).

Así pues, me di a la tarea de investigar, primero qué clase de código poner y luego cómo ponerlo.

Como dije al principio, la librería elegida fue PHP QR Code, entre otras cosas por su gran facilidad de uso. Solo debemos de incluirla en nuestro archivo PHP, y llamar a un método estático de la clase QRcode y ¡listo! (debe estar habilitada la extensión GD en el servidor)

Ejemplo 1: Generar un QR en formato PNG y mostrarlo en el navegador

require_once 'ruta/a/phpqrcode/qrlib.php';
QRcode::png("Visita mi blog https://underdog1987.wordpress.com");

Si optas por usar este método no deberás haber enviado ningún encabezado antes de llamar a QRcode. Este método puede ser útil para generar códigos con el texto de manera dinámica, por ejemplo, si el código anterior está en un archivo llamado qrgenerator.php podemos modificarlo para que quede:

require_once 'ruta/a/phpqrcode/qrlib.php';
$text=urldecode($_GET['t']);
QRcode::png("".$text);

Y entonces poder llamarlo desde un tag de la siguiente forma:

<img src="qrgenerator.php?t=Este%20es%20el%20texto%20que%20pase%20en%20la%20URL" />

Ejemplo 2: Generar un código QR y guardarlo en una carpeta

Este ejemplo me gusta más, ya que además de guardar una copia de la imagen generada, podemos indicar el tamaño y el índice de corrección de errores.

QRcode::png("texto","ruta/nombreArchivo.png",'INDICE_CORRECCION',TAMAÑO,MARGEN);

En donde:

ruta/nombreArchivo.png

Ruta (absoluta o relativa) donde se va a guardar el código generado. Se debe especificar la extensión .png

TAMAÑO

Tamaño en pixeles que tendrá cada punto del código. A mayor tamaño, más grande será la imagen generada.

MARGEN

Margen del código en unidades TAMAÑO (el margen es el espacio entre el perímetro de la imagen y la zona de los puntos).

INDICE_CORRECCION

Nivel de corrección de errores. Puede ser uno de los siguientes:

  • L – corrige hasta 7% de daño
  • M – corrige hasta 15% de daño
  • Q – corrige hasta 25% de daño
  • H – corrige hasta 30% de daño

Ejemplos

QRcode::png("Visita mi blog https://underdog1987.wordpress.com","imagenPrueba.png",'H',32,12);
imagenprueba

Corrección de errores: H Tamaño: 32 Margen: 12

QRcode::png("Visita mi blog https://underdog1987.wordpress.com","imagenPrueba.png",'L',32,12);
imagenprueba

Corrección de errores: L Tamaño: 32 Margen:12

QRcode::png("Visita mi blog https://underdog1987.wordpress.com","imagenPrueba.png",'H',5,1);
imagenprueba

Corrección de errores: H Tamaño: 5: Margen: 1

QRcode::png("Visita mi blog https://underdog1987.wordpress.com","imagenPrueba.png",'L',5,1);
imagenprueba

Corrección de errores: L Tamaño: 5 Margen: 1

Observa la diferencia de tamaño de la imagen generada en el tamaño 12 y tamaño 5.

Puedes descargar esta librería desde la página oficial del proyecto en sourceforge.net.

Este post, aunque un poco largo para ser considerado “mini”, forma parte de los Miércoles de Mini-post.

Anuncios

2 comentarios en “Generar códigos QR con PHP

  1. Qué tal buenas noches estoy por iniciar un proyecto en un colegio y requiere el uso de códigos Qr básicamente es para controlar la entrada de cada profesor al aula. La idea es tener un código Qr en cada salón y al llegar el profesor deberá escanearlo con su celular de tal forma que lo envie la fecha y hora así como el número de aula en la que se escaneo a una base de datos en mysql. te agradecería muchísimo si pudieras orientarme por donde empezar o algún sitio web donde pueda ver algo relacionado

    • underdog1987 dijo:

      Hola. Lo más difícil en el proyecto que comentas, es hacer una App que lea el código.
      Una vez hice un prototipo de App que hacía algo parecido; aunque solo funcionaba para Android.

      En este caso la aplicación debe de alguna forma saber qué profesor la está usando, para que al escanear el código (el cual sólo contendrá la información del aula) le agregue el Id del profesor y mande toda la información a una WebApp mediante POST. La WebApp será la encargada de insertar la info en la Base de Datos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s