function IsEan(CodigoEan : String) : Boolean; var CheckSum, DigitoOrig : String; i, Digito, Longitud : Integer; begin Longitud := Length(CodigoEan); // Comprobar que no hay menos o más caracteres de los permitidos (8 ó 13) if not ((Longitud <> 8) and (Longitud <> 13)) then begin // Obtener el dígito de control leido en un principio DigitoOrig := Copy(CodigoEan, Longitud, 1); // Quitar el dígito de control que se ha obtenido en la lectura para procesar // el código de barras y verificar su correcta lectura. CodigoEan := Copy(CodigoEan, 1, Longitud - 1); CheckSum := '131313131313'; Digito := 0; for i := 1 to Longitud - 1 do Digito := Digito + (StrToInt(Copy(CodigoEan, i, 1)) * StrToInt(Copy(CheckSum, i, 1))); // Extraer el valor de la derecha. Digito := StrToInt(Copy(IntToStr(Digito), Length(IntToStr(Digito)),1)); // Restarlo de 10 si es mayor o igual que 10. if Digito > 9 then Digito := 10 - Digito; // Comparar dígito de control original con el obtenido y devolver un resultado. Result := (Digito = StrToInt(DigitoOrig)); end else Result := False; end;
7896773900882
ResponderExcluir7896773900899
Nesse tipo de codigo ele tem um bug, que ainda não encontrei
Conseguir a solução e so substituir o
ResponderExcluirif Digito > 9 then Digito := 10 - Digito;
para
if Digito > 0 then Digito := 10 - Digito;
Valeu!