Array
(
)

Digitos especias dos campos dos Cheques

Marco Salles
   - 21 jan 2006

Alguem sabe a lei de formação para o digito C3 dos Cheques

Obrigado....


Marco Salles
   - 22 jan 2006

Consegui algo em

http://forum.devmedia.com.br/viewtopic.php?t=29416&highlight=cmc7&sid=2f853605fa368c7c653af78b8520d99e

Cujo o algoritimo é :



Citação:
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 ????


Edilcimar
   - 22 jan 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] C1 = 11-RESTO (OBS:SE O RESTO FOR 0 OU 1, C1 SERÁ 0)[/u:ba03b60e9b]
é claro que o resto jamais será 11


Aroldo Zanela
   - 22 jan 2006

Colega,

Função para calcular módulo 11:

#Código


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;



Marco Salles
   - 22 jan 2006

Muito obrigado edicilmar e Aroldo Zanela..

Tô entrando de férias Hoje e depois vou testar e post novamente ..

Muitissimo Obrigado;


Edilcimar
   - 22 jan 2006

ok, às ordens


Marco Salles
   - 23 jan 2006

Férias em Vila Velha .. To desfrutando Um Pouco Das Extensões das Minas Gerais , Afinal esta região toda é nossa... Hehehehehehe


Edilcimar
   - 23 jan 2006

Tá pensando que isto aqui é quintal de mineiro? Cuidado para não ser depenado!


Marco Salles
   - 03 fev 2006


Citação:
Tô entrando de férias Hoje e depois vou testar e post novamente ..


Voltando...

o meu delphi é o 5.0

e a função


Citação:
sCadeia := StrZero( iNumero, 16 );


Não compila

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..


Martins
   - 03 fev 2006


Citação:
sCadeia := StrZero( iNumero, 16 );


Não compila

Se não me engano esta função e do Cliper não ??? :?: :?: :?:

#Código


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 Aroldo Zanela.

Depois vou postar um código lá no tópico sobre o foco RadioGroup.

Boa sorte Marco Salles


Aroldo Zanela
   - 03 fev 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;



Martins
   - 03 fev 2006


Citação:
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;


Tranquilo Zanela, e essa função é bem menor do q a q eu postei.

Boa sorte!!!


Marco Salles
   - 04 fev 2006


Citação:
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

iPosicao := StrToInt( sPosicao );

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 :


Citação:
Function StrZero(iNumero, iQtde: Integer): string;
begin
Result := FormatFloat(StringOfChar(´0´,iQtde), iNumero);
end;



Aroldo Zanela
   - 04 fev 2006

Colega,

Tem razão, basta corrigir a função StrZero. :oops: