Poderia usar o próprio algorítimo de validação do componente ACBRNfe:
function ValidaEAN(const vEAN:String):Boolean;
var
Temp1, Temp2, Digito: Integer;
Temp3, Temp4: String;
begin
Result := False;
Temp2 := 0; Temp3 := '';
if ((Length(vEan) <> 8) and (Length(vEan) <> 12) and (Length(vEan) <> 13) and (Length(vEan) <> 18)) then
Exit;
Temp4 := '31313131313131313';
Temp4 := Copy(Temp4,(Length(Temp4)-Length(vEan)),Length(vEan)-1);
Digito := StrToInt(Copy(vEan,Length(vEan),1));
Temp3 := Copy(vEan,1,Length(vEan)-1);
for Temp1 := 1 to Length(Temp3) do
Temp2 := Temp2+StrToInt(Temp3[Temp1])*StrToInt(Temp4[Temp1]);
Temp2:=10-Round(Frac(Temp2/10)*10);
if Temp2 = 10 then
Temp2 := 0;
Result := (Temp2 = Digito);
end;