[GTER] Recorde de Registros
Danton Nunes
danton at inexo.com.br
Thu Feb 12 09:52:20 -02 2004
On Thu, 12 Feb 2004, Rubens Marins wrote:
> O assunto e off-topic mas creio ser de interesse de muitos ja que surgiu
> na lista.
é mesmo off-topic, mas tenho uma pequena contribuição abaixo, que pode ser
interessante.
> Sobre boletos estavamos com o mesmo problema, assim eu fui consultar o
> banco e o mesmo disse
> que ele pode mandar o numero do boleto , assim eu so precisava gerar os
> boletos usando o padrao febraban,
> naquele codigo de barras tem numeros lives que podem ser usados como
> controle interno, buscando na net
> vi que todos os metodos/bibliotecas que geram o codigo de barras para
> boletos sao pagos, assim decidi fazer
> o meu proprio em C, o codigo retorna a figura na stdout, podendo assim
> ser usado facilmente na web,
> na proxima semana devo terminar os testes e quem quiser pode me mandar
> um email que eu mando o source,
> vou disponibilizar como GPL em um site quando estiver OK.
fazer o boleto é moleza e eu gero o código de barras diretamente em
PostScript, que é uma linguagem de programação Turing-completa. O seguinte
programinha em PostScript faz o milagre:
%!PS-Adobe-2.0
/bar$wbase 0.72 def
/bar$heigth 36 def
/bar$thin 0.2 def
/bar$tab [ 6 17 9 24 5 20 12 3 18 10 ] def
/bar$toggle 1 def
/bar$make { 2 mul 1 add 0 bar$toggle 1 eq
{ bar$thin 0 rlineto 0 1 rlineto
exch bar$thin sub bar$thin sub exch rlineto
0 -1 rlineto bar$thin 0 rlineto }
{ rmoveto } ifelse
/bar$toggle 1 bar$toggle sub def } def
/bar$code {gsave bar$wbase bar$heigth scale
0 setlinewidth
4 { 0 bar$make } repeat
/bar$toggle 1 def
/bar$even 1 def
{ bar$even 1 eq
{ /bar$black exch 48 sub def /bar$even 0 def }
{ /bar$white exch 48 sub def
bar$tab dup bar$black get exch bar$white get
10 { exch dup 16 and 16 div bar$make dup add } repeat
pop pop /bar$even 1 def } ifelse
} forall
1 bar$make 0 bar$make 0 bar$make
closepath fill
grestore } def
basta chamar bar$make com os números como uma string no topo da pilha. p.ex.
(0123456789) bar$make
produz o código de barras correspondente aos algarismos de 0 a 9. O número de
algarismos tem que ser par por causa do entrelaçamento das barras. O parâmetro
bar$thin é empírico e serve para compensar o borrão provocado pela impressora
de jato de tinta, que faz com que as barras fiquem efetivamente mais largas do
que o esperado.
resumindo, fazer o boleto é bico. complicado é receber do banco a notificação
de que o boleto foi pago, num formato tratável automaticamente, pela rede, em
tempo hábil. sem essa de consultar interativamente o site de internet-banking
cujo layout muda à vontade do webmaster de plantão ou disquetes bestas que
chegam uma semana depois naquele formato indigesto da febraban.
danton
More information about the gter
mailing list