Digitos especias dos campos dos Cheques
21/01/2006
0
Obrigado....
Marco Salles
Posts
22/01/2006
Marco Salles
http://forum.devmedia.com.br/viewtopic.php?t=29416&highlight=cmc7&sid=2f853605fa368c7c653af78b8520d99e
Cujo o algoritimo é :
Porem esta ultima etapa esta estranha .. Como C3 = 11 - 0 = 0 ????
Alguem sabe onde esta o erro ????
22/01/2006
Edilcimar
é claro que o resto jamais será 11
22/01/2006
Aroldo Zanela
Função para calcular módulo 11:
Function Mod11( iNumero: Integer ) : Integer; var sCadeia : String; iX : Integer; iY : Integer; iValor : Integer; iDigito : Integer; sPosicao : String; iPosicao : Integer; Begin iValor := 0; sCadeia := StrZero( iNumero, 16 ); For iY := 2 DownTo 1 do Begin For iX := 8 DownTo 1 do Begin sPosicao := Copy( sCadeia, ( 17 - ( iX + ( 8 * ( iY - 1 ) ) ) ), 1 ); iPosicao := StrToInt( sPosicao ); iValor := iValor + ( iPosicao * ( iX + 1 ) ) End; End; iDigito := ( ( iValor * 10 ) mod 11 ); If iDigito >= 10 Then iDigito := 0; Result := StrToInt(StrZero( iDigito, 1 )); End;
22/01/2006
Marco Salles
Tô entrando de férias Hoje e depois vou testar e post novamente ..
Muitissimo Obrigado;
23/01/2006
Marco Salles
23/01/2006
Edilcimar
03/02/2006
Marco Salles
Voltando...
[b:a761383b2b]o meu delphi é o 5.0[/b:a761383b2b]
e a função
[b:a761383b2b]Não compila[/b:a761383b2b] :cry: :cry: :cry: :cry:
Se não me engano esta função e do Cliper não ??? :?: :?: :?:
Mas independentemente disso , o que esta função faz e com eu poderia inclementa-la no delphi 5.0 , para que eu consiga Testar a função passada pelo amigo Aroldo Zanela..
03/02/2006
Martins
[b:2430dceb4e]Não compila[/b:2430dceb4e] :cry: :cry: :cry: :cry:
Se não me engano esta função e do Cliper não ??? :?: :?: :?:
function StrZero(Zeros:string;Quant:integer):String; {Insere Zeros à frente de uma string} var I,Tamanho:integer; aux: string; begin aux := zeros; Tamanho := length(ZEROS); ZEROS:=´´; for I:=1 to quant-tamanho do ZEROS:=ZEROS + ´0´; aux := zeros + aux; StrZero := aux; end;
Teste esse código, ele deve ser o mesmo usado na função passada pelo nobre [b:2430dceb4e]Aroldo Zanela[/b:2430dceb4e].
Depois vou postar um código lá no tópico sobre o [b:2430dceb4e]foco RadioGroup[/b:2430dceb4e].
Boa sorte [b:2430dceb4e]Marco Salles[/b:2430dceb4e]
03/02/2006
Aroldo Zanela
Desculpem, esqueci de incluir a função StrZero:
Function StrZero(iNumero, iQtde: Integer): string; begin Result := FormatFloat(StringOfChar(´0´,iQtde-Length(IntToStr(iNumero))), iNumero); end;
03/02/2006
Martins
Desculpem, esqueci de incluir a função StrZero:
Function StrZero(iNumero, iQtde: Integer): string; begin Result := FormatFloat(StringOfChar(´0´,iQtde-Length(IntToStr(iNumero))), iNumero); end;
Tranquilo Zanela, e essa função é bem menor do q a q eu postei.
Boa sorte!!!
04/02/2006
Marco Salles
Aroldo, esta função testei e me retorna uma string com 13 Digitos...O Problema e que para IX<=3 e Iy=1 na função Mod11 Teremos um erro na instrução :
sPosicao := Copy( sCadeia, ( 17 - ( iX + ( 8 * ( iY - 1 ) ) ) ), 1 );
iPosicao := StrToInt( sPosicao );
substiuindo pelos valores teremos:
sPosicao := Copy( sCadeia, ( 17 - ( 3 + ( 8 * ( 1 - 1 ) ) ) ), 1 );
sPosicao := Copy( sCadeia, ( 17 - 3 ), 1 );
sPosicao := Copy( sCadeia,14, 1 );
Como sPosicao tem so Treze digitos , devido a função SrtZero , teremos
sposicao:= ´Vazio´ e consequentemente um erro na linha de baixo , quando tentamos fazer a conversão
[b:7d7fa53774]iPosicao := StrToInt( sPosicao );[/b:7d7fa53774]
Ja que levantei esta questão , do possível erro na função StrZero , se o o objetivo da mesma e retornar uma String com 16 Digitos , porque não simpesmente fazer :
04/02/2006
Aroldo Zanela
Tem razão, basta corrigir a função StrZero. :oops:
Clique aqui para fazer login e interagir na Comunidade :)