Submarino.com.br

Código de Barras

November 21st, 2007 por xorna |

Buenas pessoal, hoje me deparei com uma novidade no meu trabalho, precisava gerar código de barras, tudo bem, dei uma googleada, peguei alguns scripts, testei, mas nenhum estava nos padrões brasileiros, se é que isso existe aqui no nosso país. Achei um script super-interessante, não deve ser o mais otimizado para isso, fiz algumas alterações para meu uso, e decidi compartilhar ele com vocês.

As alterações que eu fiz foram muito pequenas, abaixo segue o código fonte da função.

<?php

## Geração de código de barras padrão para boletos bancários brasileiros.
## Autor: MARCOLINO, Alexandre de Jesus ( marcolino@facil.com )
## Adaptação: Xorna (falecomoxorna@blogdoxorna.com)
## Este código pode ser usado e copiado livremente desde que site e comunique o autor por email.

function esquerda($entra,$comp){
return substr($entra,0,$comp);
}

function direita($entra,$comp){
return substr($entra,strlen($entra)-$comp,$comp);
}

function montacodigodebarras($valor) {
$lw = 1 ; $hi = 50;

## A lógica abaixo aplica valores binarios para dentro da variável tabcodbarra{}

$tabcodbarra[0] = “00110″ ;
$tabcodbarra[1] = “10001″ ;
$tabcodbarra[2] = “01001″ ;
$tabcodbarra[3] = “11000″ ;
$tabcodbarra[4] = “00101″ ;
$tabcodbarra[5] = “10100″ ;
$tabcodbarra[6] = “01100″ ;
$tabcodbarra[7] = “00011″ ;
$tabcodbarra[8] = “10010″ ;
$tabcodbarra[9] = “01010″ ;
for($f1=9;$f1>=0;$f1–){
for($f2=9;$f2>=0;$f2–){
$f = ($f1 * 10) + $f2 ;
$texto = “” ;
for($i=1;$i<6;$i++){
$texto .= substr($tabcodbarra[$f1],($i-1),1) . substr($tabcodbarra[$f2],($i-1),1);
}
$tabcodbarra[$f] = $texto;
}
}

## Gerando a Imagen do Código de Barras

## Gera a base para o preenchimento do código.
## $img -> imagem do código
## $branco -> #FFFFFF
## $preto -> #000000

$img = ImageCreate($lw*95+1000,$hi+30);

$preto = ImageColorAllocate($img, 0, 0, 0);
$branco = ImageColorAllocate($img, 255, 255, 255);

## Cria o retángulo principal onde a imagem será aplicada.

ImageFilledRectangle($img, 0, 0, $lw*95+1000, $hi+30, $branco);

## Abertura do código de barras.
ImageFilledRectangle($img, 1,5,1,65,$preto);
ImageFilledRectangle($img, 2,5,2,65,$branco);
ImageFilledRectangle($img, 3,5,3,65,$preto);
ImageFilledRectangle($img, 4,5,4,65,$branco);

## Aqui começa a varredura no valor enviado para confecção do código de barras.

$fino = 1 ;
$largo = 2.72 ; // Para o windows funciona mas o tamanho ideal seria 3
$pos = 5 ;
$texto = $valor ;
if((strlen($texto) % 2) <> 0){
$texto = “0″ . $texto;
}

## Desenho dos dados
while (strlen($texto) > 0) {
$i = round(esquerda($texto,2));
$texto = direita($texto,strlen($texto)-2);

$f = $tabcodbarra[$i];

for($i=1;$i<11;$i+=2){
if (substr($f,($i-1),1) == “0″) {
$f1 = $fino ;
}else{
$f1 = $largo ;
}

## Imprimindo uma barra preta
ImageFilledRectangle($img, $pos,5,$pos-1+$f1,65,$preto) ;
$pos = $pos + $f1 ;
## Fim da impressão da barra preta

if (substr($f,$i,1) == “0″) {
$f2 = $fino ;
}else{
$f2 = $largo ;
}

## Imprimindo uma barra branca
ImageFilledRectangle($img, $pos,5,$pos-1+$f2,65,$branco) ;
$pos = $pos + $f2 ;
## Fim da impressão da barra branca

}
}

## Fechamento do código de barras.

ImageFilledRectangle($img, $pos,5,$pos-1+$largo,65,$preto);
$pos=$pos+$largo;

ImageFilledRectangle($img, $pos,5,$pos-1+$fino,65,$branco);
$pos=$pos+$fino;

ImageFilledRectangle($img, $pos,5,$pos-1+$fino,65,$preto);
$pos=$pos+$fino;

## Cria a imagem de vez
header(”Content-Type: image/jpeg”);
ImageJPEG($img);
}
?>

Agora para criar o código de barras é só utilizá-lo assim:

<?php
## Lembrando que o valor passado é o código dele
montacodigodebarras('00000000002901');
?>

Os requisitos minimos para o funcionamento disso tudo é que além do php você tenha a extensão gráfica do php habilitada no seu servidor, eu uso a GD2, e está funcionando perfeitamente.

Compartilhe e socialize:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • E-mail this story to a friend!
  • LinkArena
  • LinkedIn
  • Live
  • Netvibes
  • Socialogs
  • Technorati
  • ThisNext
  • Yahoo! Buzz
  • YahooMyWeb

2 comentários, mais um não seria um problema.

  1. Olá,

    Fiz o teste na sua função mas a mesma está dando loop contínuo na seguinte linha:
    for($i=1;$i

  2. xorna says:

    Bom, esse código estava funfando legal, talvez o numero inserido tenha causado isso, eu não tenho como lhe responder com certeza a solução por que utilizei ele somente em 2 sistemas, e logo após isso descontinuei por falta de tempo, pensei até em transformar em OO. Obrigado pelo aviso, vou tentar refazer.

Deixe seu recado

Spam Protection by WP-SpamFree

Clicky Web Analytics