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
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
Curtir tópico
+ 0
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
Clique aqui para fazer login e interagir na Comunidade :)