Validar códigos EAN

Detalles

El 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)

  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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//IMPORTANTE: Se supone que el parámetro de entrada
//"ean" está formado sólo por dígitos y son exactamente 8 o 13
 
//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 && (s[contador]>='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 acerca de los códigos EAN y su impresión como código de barras.

   

Síguenos  

   

¿Dónde estoy?  

Estás en La tecla de ESCAPE, un sitio web personal en el que nos gusta hablar de algoritmos, metodología de la programación, personajes de informática, tecnología, ingeniería del software, internet, y cualquier otra tontería que se nos ocurra.

[Leer más / Términos de uso (ToS)]

   

¿Quién está en línea?