Portada arrow Algoritmos arrow Validar códigos EAN
Validar códigos EAN
domingo, 07 de enero de 2007
ImageEl codigo EAN (European Article Number) es un sistema de código de barras para asignar un número único a cada producto. Los códigos más comunes tienen 8 o 13 dígitos, especialmente 13 (sistemas conocidos como EAN8 y EAN13). En ellos van codificados el pais de origen del producto, la empresa y el propio producto. El último de los dígitos es un dígito de control para evitar errores de transcripción.

El algoritmo para comprobar que un código EAN8 o EAN13 ha sido transcrito correctamente es extremadamente sencillo.

Podemos describirlo algoritmicamente de esta manera:

  • Comprobar que el código tiene 8 o 13 dígitos. De no ser así, no es correcto.
  • Sumar los dígitos de lugares pares por un lado y los de los impares por otro, pero sin incuir el último dígito.
  • Si el código es EAN13, multiplicar la suma de los pares por 3.
  • Si el código es EAN8, es la suma de los impares la que se multiplica por 3.
  • Sumar el resultado de los pares y el de los impares y hallar el resto de la división por 10.
  • Realizar la operación 10 menos ese resto y ese es el dígito de control.
  • Si como resultado sale 10, entenderemos que el dígito de control es 0.
  • Comprobar que el dígito de control que hemos calculado y el último dígito del código EAN coinciden

Por ejemplo, para validar el código EAN8 "12345678"  (Obviamente es inventado)

Image

  1. Separar el dígito de control. Nos quedamos con "1234567" y "8"
  2. Sumar pares:   sumapares=2+4+6=12
  3. Sumar impares: sumaimpares=1+3+5+7=16
  4. Como es EAN8, multiplicamos los impares por 3.
  5. sumaimpares=16*3=48
  6. Sumar el resultado de pares e impares:  12+48=60
  7. Hallar el resto de la division por 10:  60 mod 10 = 0
  8. Hacer 10-resto:  10-0=10
  9. Como nos ha salido 10, el dígito de control es 0.
  10. Comparar el dígito de control que hemos calculado con el que tenía el código: Nos sale 0 y el código tenía un 8. Es incorrecto.

Este método en C# realiza la validación de un código EAN8 o EAN13

//Método auxiliar para comprobar que una
//cadena está formada sólo por dígitos
bool EsSoloNumeros(String s)
{
   bool resultado = true;
   int contador=0;
   while (resultado && contador<s.length) resultado="resultado" />= '0'
                  && s[contador] <= '9';
      contador++;
   }
   return resultado;
}
 
//devuelve TRUE si el código es correcto
//FALSE en caso contrario
bool ComprobarEAN(String ean)
{
   //empezamos suponiendo que el codigo no
   //es correcto
   bool resultado = false;
   //Sólo comprobabos si la cadena está formada por
   //dígitos y su longitud es 8 o 13
   if (EsSoloNumeros(ean) && (ean.Length == 8 || ean.Length==13))
   {
      //Sumaremos los lugares pares por un lado y los
      //impares por otro
      int pares = 0;
      int impares = 0;
      //Recorrer toda la cadena excluyendo el último lugar
      for (int i = 0; i <= (ean.Length-2); i++)
      {
         if (i % 2 == 0) //Si lugar impar (empezamos por 0)
            impares += int.Parse(ean.Substring(i, 1));
         else
            pares += int.Parse(ean.Substring(i, 1));
      }
      //En EAN13, los pares se multiplican por 3
      //En EAN8, son los impares
      if (ean.Length == 13)
         pares *= 3;
      else
         impares *= 3;
      int checksum = pares + impares;
      int digitoControl = 10 - (checksum % 10);
      //Si el digito de control es 10, entendemos 0
      if (digitoControl == 10)
         digitoControl = 0;
      //Comprobar que el digito de control obtenido y el
      //de la cadena ean sean el mismo.
      resultado = (digitoControl == 
                  int.Parse(ean.Substring(ean.Length-1, 1)));
   } //fin if
   return resultado;
}
 

Para saber más acerca de EAN:

-En El rinconcito de Delphi hay un excelente tutorial External link acerca de los códigos EAN y su impresión como código de barras.

 
←Artículo anterior   Artículo siguiente→

Categorías

Suscríbete

RSS feed Sindicación RSS

(¿Qué es la sindicación RSS?)


Suscribir por e-mail

¿Dónde estoy?

Estás en La tecla de ESCAPE, un sitio web personal en el que nos gusta hablar de algoritmos, informática, tecnología, ciencia, ingeniería, internet... y cualquier tontería que se nos ocurra. El punto de vista de nuestros artículos técnicos suele ser muy básico, así que a menudo adoptamos grandes simplificaciones. (Más...-Términos de uso)