Fórum Digitos(Automatico) #229243

01/05/2004

0

Tenho um Cadastro de Clientes, e gostaria que para cada codigo criado fosse acrescentado automaticamente um digito automatico.

Ex.: 30101-9

Sendo os primeiro 5 o codigo digitado(30101) e o ultimo o digito criado automaticamente(9). Se alguem poder mim ajudar ficarei muito grato. Obrigado.

Ass. Wendel


Deltakronos

Deltakronos

Responder

Posts

02/05/2004

E-eduardo

{

O esquema funciona assim: você tem que pegar o numero de tras pra frente e ir multiplicando os numeros individualmente por 2, 3, 4... e somar seus resultados:

5416 --> (6 * 2) + (1 * 3) + (4 * 4) + (5 * 5) = 56

depois você pega o resto da divisao por 11 (56 mod 11 = 1) e subtrai de 11. Se o valor der 10 então o dígito é X, senão é o proprio numero. No nosso exemplo 11 - 1 = 10, entao: "5416-X"

outro exemplo: 
xxxxxx         20 --> 0 * 2 + 2 * 3 = 6 
xxxxxx         6 mod 11 = 6 
xxxxxx         11 - 6 = 5 entao "20-5"

}


function DV(const numero : string) : Char;
var Multiplic : Byte;
    Soma, Index : Integer;
begin
  Multiplic := 2;
  Soma := 0;
  
  for Index := Length(numero) downto 1 do
  begin
    Soma := Soma + StrToInt(numero[Index]) * Multiplic;
    if Multiplic = 9 then     // caso o codigo tenha muitas posicoes
      Multiplic := 2
    else
      Inc(Multiplic);
  end;

  Index := Soma mod 11;        // Aproveitando Index
  Index := 11 - Index;

  if Index = 10 then
    Result := ´X´
  else
    Result := IntToStr(Index)[1];
end;



Responder

Gostei + 0

02/05/2004

E-eduardo

 :oops: ESQUECI DE UMA COISA :oops: 

se Index = 11 então digito = "0"

function DV(const numero : string) : Char; 
var Multiplic : Byte; 
    Soma, Index : Integer; 
begin 
  Multiplic := 2; 
  Soma := 0; 
  
  for Index := Length(numero) downto 1 do 
  begin 
    Soma := Soma + StrToInt(numero[Index]) * Multiplic; 
    if Multiplic = 9 then     // caso o codigo tenha muitas posicoes 
      Multiplic := 2 
    else 
      Inc(Multiplic); 
  end; 

  Index := Soma mod 11;        // Aproveitando Index 
  Index := 11 - Index; 

  case Index of
    10 : Result := ´X´;
    11 : Result := "0";
    else Result := IntToStr(Index)[1]; 
end;




Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar