Página 1 de 2

Boletos do Banco Itaú

Enviado: 29 Jul 2004 15:00
por Gerald
Alguem tem a rotina desses boletos, não ele pronto mas como descobrir o digito verificador e etc...?

Enviado: 04 Ago 2004 23:57
por Trazom
Ola galera,

nao desencoraja nao, mas o codigo de barra de boleto é um nó, é formado por um monte de informação, pode ter até o valor do titulo, a data de vencimento é o numero de dias apos um determinado dia em 1997 se nao me engano, etc, apesar de nao ter a menor ideia como se faz pra imprimir o boleto, acho que eh mais facil que o codigo de barra, se nao me engano tem no site www.febraban.org

valeu

Enviado: 05 Ago 2004 00:01
por Trazom

Enviado: 05 Ago 2004 00:31
por Trazom
consultei e nao achei a informacao sobre codigo de barra, tenho um manual impresso do banco rural

Enviado: 05 Ago 2004 10:16
por Dercide
Gerald,

Para calcular o nosso numero dos boletos bancarios, você deve pedir para o seu cliente solicitar junto a cobrança do Itau, ou qualquer banco que seja, o manual de cobrança eletronica, pois cada banco possui uma maneira diferente de calcular o NOSSO NUMERO. Necessariamente você não precisa imprimir os boletos, o Itau fornece o seu programa de cobrança eletronica, o SISCOB, onde você pode digitar os boletos, ou importar um arquivo texto gerado pelo seu sistema, ai o proprio SISCOB imprime os boletos com codigo de barras, etc...

Aqui na minha empresa assim como em varios clientes meu, o meu sistema financeiro emite as notas fiscais, depois eu entro no meu modulo de HOMEBANKING, seleciono quais titulos eu quero mandar para o banco, seleciono o banco, e qual modelo de arquivo de exportação, feito isso eu exporto todos os dados, depois entro no programa do banco, importo e imprimo todos os boletos. Vale lembrar, que no mesmo banco, de acordo com o tipo de cobrança, existem deversos lay-outs diferentes, por isso eu tenho um gerador, onde eu defino os lay-out dos arquivos dos bancos.

Eu possuo alguns manuais de cobranças, inclusive do ITAU, se você quise, dá um toque que eu te mando via email.
Nota de Moderação:
por [url=https://pctoledo.org/forum/memberlist.php?mode=viewprofile&u=100899][color=#00AA00]Pablo César[/color][/url]: (de acordo a sua ultima citação) 
 
Enviar por email, resolver através de meios privados são práticas não aceitas aqui no fórum. Desestimulamos este tipo de procedimento, já que o objetivo do fórum é para servir como fonte centralizadora de informações, onde os usuários possam compartilhar de forma pública e não exclusiva. Favor ler a Regra Geral do Fórum (itens 10,11,12 e 13).
Abraços,

Dercide.
dercide@terra.com.br

Enviado: 05 Ago 2004 13:31
por Magno
Caro amigo,
A geração de boleta não é tão complicado quanto parece.
Basta ter um pouco de fôlego e analisar o código que está no site do Toledo.

Veja em
https://pctoledo.org/download/boletos.zip

Imprime Boletos Bancários em impressoras laser (Bancos: Brasil, Banespa, Bradesco, Itaú e Safra). Autor: Adriano Diógenes de Almeida
Faz os cálculos de todos os dígitos verificadores, tais como o do nosso número, dígito geral, cedente e banco.

Infelizmente ele não imprime boleto da CAIXA ECONÔMICA.
Contudo, analisando o lay out dos Códigos da CEF, fiz as alterações necessárias e deu certo. Por enaquanto, o meu único problema é consegiur o lay out da LOGOMARCA "caixa" (um arquivo do tipo msc).

A propósito, se alguém puder me ajudar, favor enviar.

Baixe o arquivo, analise e caso tenha alguma dúvida, entre em contato.

A unica restrição do programa é que ele gera somente em impressora laser. (utilizo a HP5m).

Atenciosamente

Carlos Magno.

Enviado: 05 Ago 2004 20:53
por Trazom
Achei o tal manual do banco rural

acredito ser próprio do banco rural, porém acredito que deve haver alguma semelhanca com outros bancos:

o código de barras para a cobranca contem 44 posicoes

03 - banco, 104 cef, 237 bradesco, etc
01 - moeda: 9- real,
01 - digito verificador do codigo de barras
04 - fator de vencimento
10 - valor do documento
25 - campo livre

fator de vencimento: a data de referencia é 07/10/1997
o fator é o numero de dias apos esta data, por exemplo para ctod(''05/08/2004'') -ctod(''07/10/1997'') = 2494

digito verificador:

dispor o numeros na sequencia indicada abaixo e multiplicar por seus respectivos pesos:

exemplo:

104 9 x 2494 0000123456 (25 digitos campo livre) == cod barras

432 9 8765 4329876543 2987654329876543298765432 == pesos


multiplica os valores pelos respectivos pesos, soma e divide por 11, o digito sera 11 menos o resto da divisao

ja encontrei alguns campos livres com conteudos diferentes como:

1 - tipo de cobranca = 0
3 - agencia
9 - conta
1 - digito da conta
7 - nosso numero
1 - digito nosso numero
3 - zeros

ou ainda

1 - tipo de cobranca = 9
3 - agencia cedente
3 - codigo reduzido do cliente
15 - seu numero
3 - zeros

de forma geral pode verificar boletos impressos por usuario, que normalmente segue esta discriminacao

valeu

Enviado: 06 Ago 2004 13:46
por Gerald
Trazom escreveu:Achei o tal manual do banco rural

acredito ser próprio do banco rural, porém acredito que deve haver alguma semelhanca com outros bancos:

o código de barras para a cobranca contem 44 posicoes

03 - banco, 104 cef, 237 bradesco, etc
01 - moeda: 9- real,
01 - digito verificador do codigo de barras
04 - fator de vencimento
10 - valor do documento
25 - campo livre

fator de vencimento: a data de referencia é 07/10/1997
o fator é o numero de dias apos esta data, por exemplo para ctod(''05/08/2004'') -ctod(''07/10/1997'') = 2494

digito verificador:

dispor o numeros na sequencia indicada abaixo e multiplicar por seus respectivos pesos:

exemplo:

104 9 x 2494 0000123456 (25 digitos campo livre) == cod barras

432 9 8765 4329876543 2987654329876543298765432 == pesos


multiplica os valores pelos respectivos pesos, soma e divide por 11, o digito sera 11 menos o resto da divisao

ja encontrei alguns campos livres com conteudos diferentes como:

1 - tipo de cobranca = 0
3 - agencia
9 - conta
1 - digito da conta
7 - nosso numero
1 - digito nosso numero
3 - zeros

ou ainda

1 - tipo de cobranca = 9
3 - agencia cedente
3 - codigo reduzido do cliente
15 - seu numero
3 - zeros

de forma geral pode verificar boletos impressos por usuario, que normalmente segue esta discriminacao

valeu
Valeu amigos, era isso mesmo que eu estava procurando. Valeu.

Enviado: 15 Nov 2007 12:06
por BHS
Bom dia amigos

baixei esse exemplo que pesquisei no forum

https://pctoledo.org/download/boletos.zip

li ele e pintou uma dúvida, ele manda pra Lpt1, mas se direcionar pra arquivo vai funcionar com o Dosprinter por exemplo ??!!

Obrigado

BHS

Enviado: 29 Nov 2007 19:17
por sygecom
Vc pode desenvoler em harbour/xaharbour tem umas soluções para Boleto bancario bem bacana...
http://sourceforge.net/projects/harbourboleto/

Boleto Itau

Enviado: 13 Dez 2007 11:50
por hucf
Fiz PRG para gerar boleto Itau em HTML.
Após gerar , basta abrir com IExplorer e imprimir.
O ideal é ler o manual do banco para entender como gerar os dados.
Infelizmente não achei o manual , talvez consiga com o Itau.
Segue o PRG , mas para funcionar precisa dos GIF´S do codigo de barras ,
posso mandar por e-mail !

Boa sorte,
Hu

Código: Selecionar todos

#include "fileio.ch"
* tbo2.prg - Gera arq. padrao HTML para Boleto

priv __dir_banc,__dir_img,__lin_digi,__cod_barr,__cod_banc,__dat_venc
priv __val_nomi,__dat_refe,vcod := {},vlin := {},__vnm_docu
priv __aceite,__esp_docu,__nom_cede,__nom_saca
set date format 'DD-MM-YYYY'

cls
* Dados a serem definidos
__cod_banc := '341'
__cod_agen := 'nnnn'  // string com n.o agencia bco
__cod_cart := '175'
__num_docu := '00000000'
__cta_cede := 'nnnnn' // string com n.o cta corrente
__cta_dgvf := '0'
__dat_refe := ctod('07-10-1997')
__dat_venc := ctod('  -  -    ')
__val_nomi := 0
__vnm_docu := val(__num_docu)
__nom_arqu := spac(30)
*                      1234567890123456789012345678901234567890
__nom_saca := 'ACME DO BRASIL                      '
__dad_juro := spac(40)
__dad_mult := spac(40)

@05,05 say 'Cod. Banco .....:' get __cod_banc pict '999'
@06,05 say 'Cod. Agencia ...:' get __cod_agen pict '9999'
@07,05 say 'Cod. Carteira ..:' get __cod_cart pict '999'
@08,05 say 'N.o Documento ..:' get __vnm_docu pict '@r 99999999' valid !empty(__vnm_docu)
*                 567890123456789012                      34567
@09,05 say 'N.o Conta ......:' get __cta_cede pict '99999'
@09,28 say '-'                 get __cta_dgvf pict '9'
@10,05 say 'Valor Titulo ...:' get __val_nomi pict '@er 999,999,999.99' valid !empty(__val_nomi)
@11,05 say 'Data Vencimento :' get __dat_venc valid (__dat_venc > __dat_refe)
@12,05 say 'Nome Sacado ....:' get __nom_saca pict '@!'
@13,05 say 'Juros ..........:' get __dad_juro pict '@!'
@14,05 say 'Multa ..........:' get __dad_mult pict '@!'
@15,05 say 'Nome Arq. ......:' get __nom_arqu pict '@!' valid !empty(__nom_arqu)
read

if lastkey() = 27
   quit
endi

__cod_moed := '9'
__nom_saca := alltrim(__nom_saca)
__nom_arqu := alltrim(__nom_arqu)
__num_docu := strzero(__vnm_docu,8)
__fat_venc := strzero(__dat_venc-__dat_refe,4)
__dat_venc :=dtoc(__dat_venc)
* Digito verif. "Nosso Numero"
__dgvf     := mod_10(__cod_agen+__cta_cede+__cod_cart+__num_docu)

__aceite   := ' Não '
__nom_cede := 'XXX'  // string com nome cedente
__esp_docu := 'DP'
*aadd(vobs,'*** Não pagar este boleto ***')
*aadd(vobs,'É apenas uma demonstração')

* Seq. numerica ref. para calcular __dig_veri
__cod_barr := ''
__cod_barr += __cod_banc                     //  001-003 cod. banco
__cod_barr += __cod_moed                     //  004-004 cod. moeda 9 -> Real
*__cod_barr += __dig_veri                     //  005-005 dig. verificador
__cod_barr += __fat_venc                     //  005-008 fat. vencimento (n.o dias a partir data ref.)
__cod_barr += strzero(__val_nomi * 100,10)   //  009-018 val. nominal do titulo
__cod_barr += __cod_cart                     //  019-021 cod. carteira
__cod_barr += __num_docu                     //  022-029 n.o documento
__cod_barr += __dgvf                         //  030-030 dig. verif. n.o docu
__cod_barr += __cod_agen                     //  031-034 cod. agencia
__cod_barr += __cta_cede                     //  035-039 conta cedente sem digito
__cod_barr += __cta_dgvf                     //  040-040 dig. verif. conta
__cod_barr += '000'                          //  041-043 zero fixo

* Calculando e inserindo dig. verificador
__dig_veri := mod_11(__cod_barr)
__cod_barr := stuff(__cod_barr,5,0,__dig_veri)

*memowrit('cod_bar.txt',__cod_barr)

aadd(vcod,__cod_banc)                     //  001-003 cod. banco
aadd(vcod,__cod_moed)                     //  004-004 cod. moeda 9 -> Real
aadd(vcod,__dig_veri)                     //  005-005 dig. verificador
aadd(vcod,__fat_venc)                     //  006-009 fat. vencimento (n.o dias a partir data ref.)
aadd(vcod,strzero(__val_nomi * 100,10))   //  010-019 val. nominal do titulo
aadd(vcod,__cod_cart)                     //  020-022 cod. carteira
aadd(vcod,__num_docu)                     //  023-030 n.o documento
aadd(vcod,__dgvf)                         //  031-031 dig. verif. n.o docu
aadd(vcod,__cod_agen)                     //  032-035 cod. agencia
aadd(vcod,__cta_cede)                     //  036-040 conta cedente sem digito
aadd(vcod,__cta_dgvf)                     //  041-041 dig. verif. conta cedente
aadd(vcod,'000')                          //  042-044 zero fixo

__lin_digi := ''
__lin_digi += __cod_banc                       //  001-003 cod. banco
__lin_digi += __cod_moed                       //  004-004 cod. moeda 9 -> Real
__lin_digi += __cod_cart + left(__num_docu,2)  //  005-009 pos. 20-24 cod. barras
__lin_digi += mod_10(__lin_digi)               //  010-010 digito verif. 1.o campo
__lin_digi += right(__num_docu,6)              //  011-016 pos. 25 a 30
__lin_digi += __dgvf                           //  017-017 pos. 31
__lin_digi += left(__cod_agen,3)               //  018-020 3 dig. agencia
__lin_digi += mod_10(subs(__lin_digi,11,10))   //  021-021 digito verif. 2.o campo
__lin_digi += right(__cod_agenc,1)             //  022-022 ult. dig. agencia
__lin_digi += __cta_cede                       //  023-027
__lin_digi += __cta_dgvf                       //  028-028
__lin_digi += '000'                            //  029-031 pos. 44
__lin_digi += mod_10(subs(__lin_digi,22,10))   //  032-032 digito verif. 3.o campo
__lin_digi += __dig_veri                       //  033-033 digito verif. geral
__lin_digi += __fat_venc                       //  034-037
__lin_digi += strzero(__val_nomi * 100,10)     //  038-047

*          1         2         3         4
* 123456789012345678901234567890123456789012345678901234567890
*      6     2     8      5     1      8 0
* 99999.99999 99999.999999 99999.999999 9 99999999999999
__lin_digi := stuff(__lin_digi, 6,0,'.')
__lin_digi := stuff(__lin_digi,12,0,' ')
__lin_digi := stuff(__lin_digi,18,0,'.')
__lin_digi := stuff(__lin_digi,25,0,' ')
__lin_digi := stuff(__lin_digi,31,0,'.')
__lin_digi := stuff(__lin_digi,38,0,' ')
__lin_digi := stuff(__lin_digi,40,0,' ')

*memowrit('lin_dig.txt',__lin_digi)

aadd(vlin,__cod_banc                     )   //  001-003 cod. banco
aadd(vlin,__cod_moed                     )   //  004-004 cod. moeda 9 -> Real
aadd(vlin,__cod_cart + left(__num_docu,2))   //  005-009 cod. carteira + ...
aadd(vlin,mod_10(__lin_digi)             )   //  010-010 digito verif. 1.o campo
aadd(vlin,right(__num_docu,6)            )   //  011-016 pos. 25 a 30
aadd(vlin,__dgvf                         )   //  017-017 pos. 31
aadd(vlin,left(__cod_agen,3)             )   //  018-020 3 dig. agencia
aadd(vlin,mod_10(subs(__lin_digi,11,10)) )   //  021-021 digito verif. 2.o campo
aadd(vlin,right(__cod_agenc,1)           )   //  022-022 ult. dig. agencia
aadd(vlin,__cta_cede                     )   //  023-027
aadd(vlin,__cta_dgvf                     )   //  028-028
aadd(vlin,'000'                          )   //  029-031 pos. 44
aadd(vlin,mod_10(subs(__lin_digi,22,10)) )   //  032-032 digito verif. 3.o campo
aadd(vlin,__dig_veri                     )   //  033-033 digito verif. geral
aadd(vlin,__fat_venc                     )   //  034-037
aadd(vlin,strzero(__val_nomi * 100,10)   )   //  038-047

html_boleto(__lin_digi,__cod_barr,vlin,vcod)

******************************************************************************
function html_boleto
******************************************************************************
memvar __cod_banc,__cod_agen,__cod_cart,__num_docu,__cta_cede,__cta_dgvf,;
       __dat_venc,__val_nomi,__dgvf,__nom_cede,__nom_saca,__esp_docu,;
       __aceite,__nom_arqu
para __linh,__bcod,vlin,vcod
priv __text,vtab := {},__tref

__val_nomi := tran(__val_nomi,'@er 9,999,999.99')
__dat_docu := dtoc(date())
__dat_proc := __dat_docu

aadd(vtab,{'0','NNWWN'})
aadd(vtab,{'1','WNNNW'})
aadd(vtab,{'2','NWNNW'})
aadd(vtab,{'3','WWNNN'})
aadd(vtab,{'4','NNWNW'})
aadd(vtab,{'5','WNWNN'})
aadd(vtab,{'6','NWWNN'})
aadd(vtab,{'7','NNNWW'})
aadd(vtab,{'8','WNNWN'})
aadd(vtab,{'9','NWNWN'})

* Def. padrao 2 of 5 do cod. barras
__segm := ''
for __i = 1 to len(__bcod) step 2
    * Segmento barra
    __npos := ascan(vtab,{ |v| v[1] = subs(__bcod,__i,1) })
    __segb := vtab[__npos,2]
    * Segmento espaco
    __npos := ascan(vtab,{ |v| v[1] = subs(__bcod,__i+1,1) })
    __sege := vtab[__npos,2]
    for __j = 1 to len(__segb)
        __segm += subs(__segb,__j,1) + subs(__sege,__j,1)
    next
next

__narq := 'bol_ref.txt'
__crrt := chr(13)+chr(10)
if !file(__narq)
   alert(' Nao tem Arq. ')
endi

__text := ''
__npos := 1
__tref := memoread(__narq)

do whil .t.
   __ltxt := ''
   for __i = __npos to len(__tref)
       if (subst(__tref,__i,1) + subst(__tref,__i+1,1)) = __crrt
          __npos += 2
          exit
       endi
       __ltxt += subst(__tref,__i,1)
       __npos += 1
   next
    * Verificando se existe campo variavel
    if !empty((__pos_camp := at('',__ltxt)))
       __ltxt := subst(__ltxt,__pos_camp+1,len(alltrim(__ltxt))-2)
       __ltxt := &__ltxt
    endi
    __text += __ltxt
    __text += __crrt
    if __npos >= len(__tref)
       exit
    endi
endd

__text += '    <tr valign="top">' + __crrt
__text += '      <td width="67%" valign="center">  ' + __crrt
* Start Code
__text += '         <img src="pf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
__text += '        ><img src="bf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
__text += '        ><img src="pf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
__text += '        ><img src="bf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)

for __i = 1 to len(__segm)
    __text += '         ><img src="'
    if mod(__i,2) # 0
       __text += iif(subs(__segm,__i,1)='W','pg.gif"','pf.gif"')
    else
      __text += iif(subs(__segm,__i,1)='W','bg.gif"','bf.gif"')
    endi
    __text += ' border="0"'
    __text += iif(subs(__segm,__i,1)='W',' width="3"',' width="1"')
    __text += ' height="49"' + chr(13) + chr(10)
next

* Stop Code
__text += '        ><img src="pg.gif" border="0" width="3" height="49"' + chr(13) + chr(10)
__text += '        ><img src="bf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
__text += '        ><img src="pf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
**
__text += '      </td>' + __crrt
__text += '      <td width="33%" align="center">' + __crrt
__text += '         ' + __crrt
__text += '      </td>' + __crrt
__text += '    </tr>' + __crrt
__text += '</table>' + __crrt
__text += '</html>'
**
memowrit(__nom_arqu,__text)

retu NIL

******************************************************************************
function mod_10
******************************************************************************
* MOD 10 - formula LUHN
para __nref
priv __i,__soma,__dver,__vsgm

__soma := 0
for __i = 1 to len(__nref)
    __segm := subst(__nref,len(__nref)-__i+1,1)
    __vsgm := iif(mod(__i,2)#0,2*val(__segm),val(__segm))
    __vsgm := iif(__vsgm>9,iif(__vsgm=18,9,mod(__vsgm,9)),__vsgm)  // <---
    __soma += __vsgm
next

__dver := 10 - mod(__soma,10)
__dver := iif(__dver=10,0,__dver)
retu alltrim(str(__dver,0))


******************************************************************************
function mod_11
******************************************************************************
para __nref
priv __i,__j,__soma,__dver

__soma := 0
for __i = 1 to len(__nref) step 8
    for __j = 2 to 9
        if len(__nref)-__i-__j+3 < 1
           __i := len(__nref)
           exit
        endi
        __segm := subst(__nref,len(__nref)-__i-__j+3,1)
        __soma += val(__segm) * __j
    next
next

__dver := 11 - mod(__soma,11)
__dver := iif(__dver=1 .or. __dver=10 .or. __dver=11,1,__dver)

retu alltrim(str(__dver,0))

Enviado: 14 Dez 2007 20:11
por Pablo César
Muito bom seu aplicativo caro HU, este é mais um exemplo de como imprimir em formato HTML se ter a preocupação de impressoras e ao mesmo tempo este exemplo pode alavancar outros boletos de outros bancos. Amanhã vou checar o código de barras, mas pelo que me pareceu correpodem ao número acima do boleto. Parabéns pelo seu trabalho e muito obrigado por estar compartindo conosco.

Enviado: 15 Dez 2007 10:45
por BHS
bom dia amigos

gostei de poder fazer o boleto em HTML, porém em nossa empresa usamos o Bradesco !!
esses gifs de código de baarras onde eu posso encontra-los (bradesco) ?

Obrigado

BHS

Enviado: 15 Dez 2007 11:25
por Pablo César
Eu não possuo instrução algma do Bradesco, mas acho que tanto a estrutura TODA do boleto (aqui apresentado pelo colega HU) como a do código de barras DEVERÃO serem as MESMAS. O que muda é o código do banco, da agência, (talvez carteira ?), logotipo, código do banco (gráfico, gif) mas o resto deve ser padrão do BC. Você BHS, poderia checar com o Bradesco ou até mesmo comparando boleto do Bradesco se o código de barras mantém o mesmo padrão que aqui apresentado ?.

Boleto Bradesco

Enviado: 16 Dez 2007 09:40
por hucf
Saudações ,
Até onde sei cada banco tem seu próprio "layout" , o manual da Febraban é útil para entender o geral , mas para fazer o boleto de um bco específico sempre é melhor utilizar o manual do próprio bco. O problema é conseguir através do bco ...
Vc pode tentar procurar na Internet , sempre se acha alguns e aí o problema é saber se é válido !
O programa que fiz é específico para o Itaú , para outros bcos o layout do boleto PODE SER eventualmente DIFERENTE , mas isso pode ser resolvido obtendo um boleto impresso do ref. bco e o "logo" (por isso o arq. "BCO_REF.TXT"). A questão é o posicionamento dos dados no código de barras , isto é os dados são geralmente os mesmos porém o seu posicionamento no código de barras varia de bco para bco.
Os GIF´s são universais para o padrão de código de barras utilizados nos boletos.

Feliz Natal pra todos.
Espero ter ajudado e boa sorte
Hu