unit U_Modulo10;

interface

uses SysUtils;

function Mod10(Num : String) : Integer;

implementation

function Mod10(Num : String) : Integer;
Var
   Tamanho, Soma : Integer;
   Resultado : Array [1..100] of Integer;
   Fator, Resto, I : Byte;
begin
     {Função que retorna dígito baseado no cálculo do MÓDULO 10}

     Tamanho := Length(Num);            // Tamanho da cadeia de números
     Fator := 2;                        // Fator para multiplicação
     For I := Tamanho Downto 1 Do       // Inicia a multiplicação da DIREITA PARA A ESQUERDA
     begin
          Resultado[I] := StrToInt(Copy(Num,I,1)) * Fator;
          If Fator = 2 Then             // Alterna o fator entre 2 e 1
             Fator := 1
          Else
              Fator := 2;
     end;
     Soma := 0;
     For I := 1 To Tamanho Do           // Somam-se todos os resultados da multiplicação
         If Resultado[I] > 9 Then       // Se o resultado contiver 2 dígitos, somaremos separadamente os dois
            Soma := Soma + StrToInt(Copy(IntToStr(Resultado[I]),1,1)) + StrToInt(Copy(IntToStr(Resultado[I]),2,1))
         Else
             Soma := Soma + Resultado[I];
     Resto := Soma mod 10;              // Obtem-se o resto da divisão entre a SOMA e 10
     If Resto = 0 Then                  // Se RESTO for zero, o dígito é zero
        Mod10 := 0
     Else                               // Se existir RESTO, o dígito será (10 - RESTO)
         Mod10 := 10 - Resto;
end;

end.
 