Calcular el dígito de control de un EAN13

6198 vistas

En informática de gestión es usual la impresión de etiquetas con Códigos de Barras. Uno de los sistemas de codificación más utilizados es el EAN-13 en el que se permite codificar la información con doce dígitos numéricos teniéndose que calcular el treceavo dígito, o dígito de control, en función de los doce anteriores.

Sin este cálculo del treceavo dígito ningún lector de códigos de barras reconocerá, y transmitirá, el código leído como código válido.
 

delphi
  1. function DigitControlCorrecto(Codigo: string): boolean;
  2. const
  3. Constantes: array[1..12] of byte = (1,3,1,3,1,3,1,3,1,3,1,3);
  4. var
  5. DC: byte;
  6. i: byte;
  7. Suma: byte;
  8. Superior: byte;
  9. begin
  10. Result := false;
  11.  
  12. DC := StrToInt( Codigo[Length(Codigo)] );
  13.  
  14. Delete(Codigo, length(Codigo), 1); // Tenemos el código sin el DC
  15.  
  16. // si es un EAN8 ponemos 0 a la izquierda, no afecta
  17. while length(Codigo) < 12 do insert('0', Codigo, 1);
  18.  
  19. Suma := 0;
  20. for i := 1 to 12 do Suma := Suma + Constantes[i] * StrToInt(Codigo[i]);
  21.  
  22. Superior := Suma;
  23. while Superior mod 10 <> 0 do inc(Superior);
  24.  
  25. if DC = (Superior - Suma) then Result := true;
  26. end;