[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