validar dv de conta de bancos
09/09/2004
0
gostaria saber se alguem tem alguma função pra validar o dv da agencia e conta dos bancos.... bb, bradesco, bec, caixa... etc!
Guibas
Curtir tópico
+ 0
Responder
Posts
09/09/2004
Motta
Tenho de alguns
Caso vc ou alguém arrume o algoritmo de outros peço que me repasse.
Caso vc ou alguém arrume o algoritmo de outros peço que me repasse.
{Valida dv de Conta Corrente dos bancos Forma de usar Declarar o uso desta unit. Declara uma variável do Tipo TDvBancoDados. Informer neste record Banco,Agencia e Conta Corrente. Chamar a Função ValidaDvBanco passando a variável como parametro Retorna uma variavel do tipo TDvBancoOcorrencia aBancoSemRotina - Não temos a rotina de cálculo deste banco aDvInvalido - dv calculado não bateu com o informado aDvValido - dv válido aErroRotina -- qq outro erro na rotina Motta } -- unit uDvBancos; interface Uses sysutils , Classes; type TDvBancoOcorrencia = (aBancoSemRotina,aDvInvalido,aDvValido,aErroRotina); type TDvBancoDados = Record Banco: integer; Agencia: integer; ContaCorrente: string; end; function ValidaDvBanco(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; implementation function ValidaDvBanco(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; // Alinhamento // function FillCharAlgn(Alignment: TAlignment; Value: String; MaxLength: Integer; Character: Char): String; begin if Length(Value) > MaxLength then Result := Copy(Value,1,MaxLength) else Result := Value; while Length(Result) < MaxLength do begin case Alignment of taLeftJustify: Result := Result + Character; taRightJustify: Result := Character + Result; taCenter: Result := Character + Result + Character; else ; end; if Length(Result) > MaxLength then Result:= Copy(Result,1,MaxLength); end; end; {Cada banco tem sua própria subrotina de cálculo} //================================================================= function BBrasil(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto: integer; const sPesos = ´23456789´; begin // agencia o digito pode ser alfa !!?? sConta:= DadosBancarios.ContaCorrente; j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); soma:= (soma + StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); end; resto:= soma mod 11; dv:= IntToStr(11 - resto); if dv = ´10´ then dv:= ´X´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BBanerj(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto,parc: integer; const sPesos = ´212121212´; begin sConta:= IntToStr(DadosBancarios.Agencia) + FillCharAlgn(taRightJustify,DadosBancarios.ContaCorrente,6,´0´); j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); parc := (StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); if parc >= 10 then parc := StrToInt(Copy(IntToStr(parc),1,1)) + StrToInt(Copy(IntToStr(parc),2,1)); soma:= (soma + parc); end; resto:= soma mod 10; dv:= IntToStr(10 - resto); if dv = ´10´ then dv:= ´0´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BBanespa(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto: integer; const sPesos = ´37913179137´; begin sConta:= IntToStr(DadosBancarios.Agencia) + FillCharAlgn(taRightJustify,DadosBancarios.ContaCorrente,9,´0´); j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); soma:= (soma + ((StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))) mod 10)); end; resto:= soma mod 10; dv:= IntToStr(10 - resto); if dv = ´10´ then dv:= ´0´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BBandeirantes(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,parc,resto: integer; const sPesos = ´21212121212121´; begin sConta:= IntToStr(DadosBancarios.Agencia) + FillCharAlgn(taRightJustify,DadosBancarios.ContaCorrente,10,´0´); j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); parc := (StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); if parc >= 10 then parc := StrToInt(Copy(IntToStr(parc),1,1)) + StrToInt(Copy(IntToStr(parc),2,1)); soma:= (soma + parc); end; resto:= soma mod 10; dv:= IntToStr(10 - resto); if dv = ´10´ then dv:= ´0´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BBoavista(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto: integer; const sPesos = ´371371371371´; begin sConta:= IntToStr(DadosBancarios.Agencia) + FillCharAlgn(taRightJustify,DadosBancarios.ContaCorrente,10,´0´); j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); soma:= (soma + (StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1)))); end; resto:= soma mod 10; dv:= IntToStr(10 - resto); if dv = ´10´ then dv:= ´0´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BBradesco(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto: integer; const sPesos = ´23456789´; begin // agencia o digito pode ser alfa !!?? sConta:= DadosBancarios.ContaCorrente; j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); soma:= (soma + StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); end; resto:= soma mod 11; dv:= IntToStr(11 - resto); if dv = ´10´ then dv:= ´P´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BReal(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto: integer; const sPesos = ´234567´; begin sConta:= DadosBancarios.ContaCorrente; j:=0; soma:=0; for i:=(Length(sConta)) Downto 2 do // o dv é na frente begin Inc(j); soma:= (soma + StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); end; resto:= soma mod 11; dv:= IntToStr(11 - resto); if dv = ´10´ then dv:= ´0´; if Copy(sConta,1,1) = dv then // o dv é na frente Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BEconomico(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto: integer; const sPesos = ´234567892´; begin sConta:= DadosBancarios.ContaCorrente; j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); soma:= (soma + StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); end; resto:= soma mod 11; dv:= IntToStr(11 - resto); if dv = ´10´ then dv:= ´A´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BItau(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,parc,resto: integer; const sPesos = ´2121212121´; begin sConta:= IntToStr(DadosBancarios.Agencia) + FillCharAlgn(taRightJustify,DadosBancarios.ContaCorrente,6,´0´); j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); parc := (StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); if parc >= 10 then parc := StrToInt(Copy(IntToStr(parc),1,1)) + StrToInt(Copy(IntToStr(parc),2,1)); soma:= (soma + parc); end; resto:= soma mod 10; dv:= IntToStr(10 - resto); if dv = ´10´ then dv:= ´0´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BUnibanco(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,parc,resto: integer; const sPesos = ´2121212121´; begin sConta:= IntToStr(DadosBancarios.Agencia) + FillCharAlgn(taRightJustify,DadosBancarios.ContaCorrente,7,´0´); j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); parc := (StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); if parc >= 10 then parc := StrToInt(Copy(IntToStr(parc),1,1)) + StrToInt(Copy(IntToStr(parc),2,1)); soma:= (soma + parc); end; resto:= soma mod 10; dv:= IntToStr(10 - resto); if dv = ´10´ then dv:= ´0´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BCitibank(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto: integer; const sPesos = ´2345678´; begin sConta:= DadosBancarios.ContaCorrente; j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); soma:= (soma + StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); end; resto:= soma mod 11; dv:= IntToStr(11 - resto); if dv = ´10´ then dv:= ´0´; if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BBoston(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto: integer; const sPesos = ´42857428´; begin sConta:= DadosBancarios.ContaCorrente; j:=0; soma:=0; for i:=(Length(sConta)-2) Downto 1 do //dv duplo begin Inc(j); soma:= (soma + StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1))); end; resto:= soma mod 11; if (11 - resto) < 10 then dv:= ´0´ + IntToStr(11 - resto) else dv:= IntToStr(11 - resto); if Copy(sConta,(Length(sConta)-1),2) = dv then //dv duplo Result:= aDvValido else Result:= aDvInvalido; end; //================================================================= function BBBVA(DadosBancarios: TDvBancoDados):TDvBancoOcorrencia; var sConta,dv: string; i,j,soma,resto: integer; const sPesos = ´2345672345672´; begin sConta:= IntToStr(DadosBancarios.Agencia) + FillCharAlgn(taRightJustify,DadosBancarios.ContaCorrente,10,´0´); j:=0; soma:=0; for i:=(Length(sConta)-1) Downto 1 do begin Inc(j); soma:= (soma + (StrToInt(Copy(sConta,i,1)) * StrToInt(Copy(sPesos,j,1)))); end; resto:= soma mod 11; dv:= IntToStr(11 - resto); if dv = ´10´ then dv:= ´A´; // contas antigas anterior ao Altamira(esta era a definição original) if Copy(sConta,Length(sConta),1) = dv then Result:= aDvValido else Result:= aDvInvalido; end; //==========> Inicio da rotina principal begin try {Chama rotina conforme o número do banco} case DadosBancarios.Banco of 001: Result:=BBrasil(DadosBancarios); 029: Result:=BBanerj(DadosBancarios); 033: Result:=BBanespa(DadosBancarios); 230: Result:=BBandeirantes(DadosBancarios); 231: Result:=BBoavista(DadosBancarios); 237: Result:=BBradesco(DadosBancarios); 275: Result:=BReal(DadosBancarios); 334: Result:=BEconomico(DadosBancarios); 341: Result:=BItau(DadosBancarios); 409: Result:=BUnibanco(DadosBancarios); 477: Result:=BCitibank(DadosBancarios); 479: Result:=BBoston(DadosBancarios); 641: Result:=BBBVA(DadosBancarios); else Result:=aBancoSemRotina; // Não temos a rotina end; except Result:=aErroRotina; // Erro qualquer end; end; end.
Responder
Clique aqui para fazer login e interagir na Comunidade :)