Digitos especias dos campos dos Cheques
Alguem sabe a lei de formação para o digito C3 dos Cheques
Obrigado....
Obrigado....
Marco Salles
Curtidas 0
Respostas
Marco Salles
21/01/2006
Consegui algo em
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 ????
http://forum.devmedia.com.br/viewtopic.php?t=29416&highlight=cmc7&sid=2f853605fa368c7c653af78b8520d99e
Cujo o algoritimo é :
CÁCULO DO C3
============
Cheque: 001552
C3=0
0 0 1 5 5 2
x x x x x x
7 6 5 4 3 2
------------------
0 0 5 20 15 4 = 44
44 / 11 resto = 0
C3 = 11 - 0 Zero ????????????
C3 = 0 ?
Porem esta ultima etapa esta estranha .. Como C3 = 11 - 0 = 0 ????
Alguem sabe onde esta o erro ????
GOSTEI 0
Edilcimar
21/01/2006
não é uma operação aritimética, no módulo 11, se o resto for 10, C3 deve ser 0, creio que esteja errado, pois na conta do link, [u:ba03b60e9b][b:ba03b60e9b] C1 = 11-RESTO (OBS:SE O RESTO FOR 0 OU 1, C1 SERÁ 0)[/b:ba03b60e9b][/u:ba03b60e9b]
é claro que o resto jamais será 11
é claro que o resto jamais será 11
GOSTEI 0
Aroldo Zanela
21/01/2006
Colega,
Função para calcular módulo 11:
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;
GOSTEI 0
Marco Salles
21/01/2006
Muito obrigado edicilmar e Aroldo Zanela..
Tô entrando de férias Hoje e depois vou testar e post novamente ..
Muitissimo Obrigado;
Tô entrando de férias Hoje e depois vou testar e post novamente ..
Muitissimo Obrigado;
GOSTEI 0
Edilcimar
21/01/2006
ok, às ordens
GOSTEI 0
Marco Salles
21/01/2006
Férias em Vila Velha .. To desfrutando Um Pouco Das Extensões das Minas Gerais , Afinal esta região toda é nossa... Hehehehehehe
GOSTEI 0
Edilcimar
21/01/2006
Tá pensando que isto aqui é quintal de mineiro? Cuidado para não ser depenado!
GOSTEI 0
Marco Salles
21/01/2006
Tô entrando de férias Hoje e depois vou testar e post novamente ..
Voltando...
[b:a761383b2b]o meu delphi é o 5.0[/b:a761383b2b]
e a função
sCadeia := StrZero( iNumero, 16 );
[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..
GOSTEI 0
Martins
21/01/2006
sCadeia := StrZero( iNumero, 16 );
[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]
GOSTEI 0
Aroldo Zanela
21/01/2006
Colegas,
Desculpem, esqueci de incluir a função StrZero:
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;
GOSTEI 0
Martins
21/01/2006
[quote:344385315d=´Aroldo Zanela´]Colegas,
Desculpem, esqueci de incluir a função StrZero:
[/quote:344385315d]
Tranquilo Zanela, e essa função é bem menor do q a q eu postei.
Boa sorte!!!
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!!!
GOSTEI 0
Marco Salles
21/01/2006
Colegas,
Desculpem, esqueci de incluir a função StrZero:
Código:
Function StrZero(iNumero, iQtde: Integer): string;
begin
Result := FormatFloat(StringOfChar(´0´,iQtde-Length(IntToStr(iNumero))), iNumero);
end;
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 :
Function StrZero(iNumero, iQtde: Integer): string;
begin
Result := FormatFloat(StringOfChar(´0´,iQtde), iNumero);
end;
GOSTEI 0
Aroldo Zanela
21/01/2006
Colega,
Tem razão, basta corrigir a função StrZero. :oops:
Tem razão, basta corrigir a função StrZero. :oops:
GOSTEI 0