Funcao - calculo de modulo 11

Top  Previous  Next

// O modulo 11 é calculado multiplicando-se os algarismos da direita para a esquerda por 9 depois 8 ...

// até 2 iniando novamente no 9 a soma resultante

function CalcModulo11(const S: string): string;

var

  I, Mult, Tot: Integer;

begin

  Tot  := 0;

  Mult := 2;

  for I := Length(S) downto 1 do

  begin

    Tot := Tot + (StrToInt(S[I]) * Mult);

    Inc(Mult);

    if Mult > 9 then Mult := 2;

  end;

  Tot := 11 - (Tot mod 11);

  if Tot > 9 then Tot := 1;

  Result := IntToStr(Tot);

end;

 

 

---------------------------------------------------------

 

// esta eu achei na net

function CalculaDV11(const numero_base: string): string;

var

  i, tamanho_num, peso, soma, resto: integer;

begin

  tamanho_num := length(numero_base);

  peso := 2;

  soma := 0;

  for i := (tamanho_num) downto 1 do

  begin

    soma := soma + (StrToInt(numero_base[i]) * peso);

    if peso = 9 then

      peso := 2

    else

      peso := peso + 1;

  end;

  resto := soma mod 11;

 

  if (resto = 0or (resto = 1) then

    Result := '0'

  else

    Result := IntToStr(11 - resto);

end;

 

function VerificaDV11(entrada : string): boolean;

var

  parte_ini, parte_fin : string;

begin

  parte_ini := Copy(entrada, 1, Length(entrada)-1);

  parte_fin := Copy(entrada, Length(entrada), 1);

  Result := StrToInt(parte_fin) = CalculaDV11(parte_ini);

end;