função pega na internet, mas testei e funciona.
function ValidaEAN( CodigoBarras:string ): Boolean;
var numero, soma2:string;
digito:byte;
soma,s,i,calculo:integer;
begin
result:= false;
numero := CodigoBarras;
while (length(numero) < 13) do
begin
numero:= '0'+numero;
end;
digito:= StrToInt(copy(numero,length(numero),1));
delete(numero,length(numero),1);
if (numero<>'000000000000') then
begin
s:=length(numero);
i:=0;
calculo := 3;
soma :=0;
repeat
soma:= soma + StrToInt(copy(numero,length(numero)-i,1))* calculo;
inc(i);
if calculo =3 then
calculo := 1
else
calculo := 3;
dec(s);
until s=0;
numero:=IntToStr(soma);
soma2:= copy(numero,length(numero),1);
if soma2 = '0'then
Result:= (digito=strtointdef(soma2,0))
else
result:= (digito=10-StrToInt(soma2));
end;
end;
segunda-feira, 31 de outubro de 2011
sábado, 29 de outubro de 2011
sexta-feira, 14 de outubro de 2011
segunda-feira, 3 de outubro de 2011
Validador de Código de Barras (EAN)
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;
Assinar:
Postagens (Atom)