Criando códigos de barra sequenciais usando Shell Script e PHP

Publicado por Hudson Moreira Guimaraes dos Santos em 06/04/2011

[ Hits: 11.128 ]

 


Criando códigos de barra sequenciais usando Shell Script e PHP



Olá. Quero compartilhar minha experiência com código de barras, onde tive que criar uma porção de etiquetas para um programa que fiz em GAMBAS, onde tenho cadastro de livros de uma biblioteca.

Programo muito bem em Shell Script mas não tão bem em PHP. Acredito que somente PHP daria para fazer tudo, mas para quem gosta de soluções paliativas rsrsrs, segue o script.

Antes de mais nada quero agradecer o script em PHP feito por "sidsodre", que gera o código de barras, com base nele que deu pra fazer o que fiz em shell.

Tudo que fiz foi no Ubuntu 10.10. Portanto além do Apache e do PHP, instale também o "barcod", "php- image-barcode" e o "php5-gd" com suas respectivas dependências. Na pasta do Apache (no meu caso é /var/www), crie uma pasta chamada "cod" e crie um chamado script.sh com o seguinte conteúdo:

#!/bin/bash
quant=500   # quantidade de codigos a ser gerado
for (( i=1 ; i <= $quant ;i++ )) do
arquivo=`echo " 10000000000 + $i " | bc`
echo "<?php " >> ${arquivo}.php
echo "function CodigoBarras(\$code) { " >> ${arquivo}.php
echo " \$lw = 2; \$hi = 100; " >> ${arquivo}.php
echo " \$Lencode = array('0001101','0011001','0010011','0111101','0100011', " >> ${arquivo}.php
echo " '0110001','0101111','0111011','0110111','0001011'); " >> ${arquivo}.php
echo " \$Rencode = array('1110010','1100110','1101100','1000010','1011100', " >> ${arquivo}.php
echo " '1001110','1010000','1000100','1001000','1110100'); " >> ${arquivo}.php
echo " \$ends = '101'; \$center = '01010'; " >> ${arquivo}.php
echo " /* UPC-A Must be 11 digits, we compute the checksum. */ " >> ${arquivo}.php
echo " if ( strlen(\$code) != 11 ) { die(\"UPC-A Must be 11 digits.\"); } " >> ${arquivo}.php
echo " /* Compute the EAN-13 Checksum digit */ " >> ${arquivo}.php
echo " \$ncode = '0'.\$code; " >> ${arquivo}.php
echo " \$even = 0; \$odd = 0; " >> ${arquivo}.php
echo " for (\$x=0;\$x<12;\$x++) { " >> ${arquivo}.php
echo " if (\$x % 2) { \$odd += \$ncode[\$x]; } else { \$even += \$ncode[\$x]; } " >> ${arquivo}.php
echo " } " >> ${arquivo}.php
echo " \$code.=(10 - ((\$odd * 3 + \$even) % 10)) % 10; " >> ${arquivo}.php
echo " /* Create the bar encoding using a binary string */ " >> ${arquivo}.php
echo " \$bars=\$ends; " >> ${arquivo}.php
echo " \$bars.=\$Lencode[\$code[0]]; " >> ${arquivo}.php
echo " for(\$x=1;\$x<6;\$x++) { " >> ${arquivo}.php
echo " \$bars.=\$Lencode[\$code[\$x]]; " >> ${arquivo}.php
echo " } " >> ${arquivo}.php
echo " \$bars.=\$center; " >> ${arquivo}.php
echo " for(\$x=6;\$x<12;\$x++) { " >> ${arquivo}.php
echo " \$bars.=\$Rencode[\$code[\$x]]; " >> ${arquivo}.php
echo " } " >> ${arquivo}.php
echo " \$bars.=\$ends; " >> ${arquivo}.php
echo " /* Generate the Barcode Image */ " >> ${arquivo}.php
echo " \$img = ImageCreate(\$lw*95+30,\$hi+30); " >> ${arquivo}.php
echo " \$fg = ImageColorAllocate(\$img, 0, 0, 0); " >> ${arquivo}.php
echo " \$bg = ImageColorAllocate(\$img, 255, 255, 255); " >> ${arquivo}.php
echo " ImageFilledRectangle(\$img, 0, 0, \$lw*95+30, \$hi+30, \$bg); " >> ${arquivo}.php
echo " \$shift=10; " >> ${arquivo}.php
echo " for (\$x=0;\$x<strlen(\$bars);\$x++) { " >> ${arquivo}.php
echo " if ((\$x<10) || (\$x>=45 && \$x<50) || (\$x >=85)) { \$sh=10; } else { \$sh=0; }" >> ${arquivo}.php
echo " if (\$bars[\$x] == '1') { \$color = \$fg; } else { \$color = \$bg; } " >> ${arquivo}.php
echo " ImageFilledRectangle(\$img, (\$x*\$lw)+15,5, (\$x+1)*\$lw+14,\$hi+5+\$sh,\$color); " >> ${arquivo}.php
echo " } " >> ${arquivo}.php
echo " /* Add the Human Readable Label */ " >> ${arquivo}.php
echo " ImageString(\$img,4,5,\$hi-5,\$code[0],\$fg); " >> ${arquivo}.php
echo " for (\$x=0;\$x<5;\$x++) { " >> ${arquivo}.php
echo " ImageString(\$img,5,\$lw* (13+\$x*6)+15,\$hi+5,\$code[\$x+1],\$fg); " >> ${arquivo}.php
echo " ImageString(\$img,5,\$lw* (53+\$x*6)+15,\$hi+5,\$code[\$x+6],\$fg); " >> ${arquivo}.php
echo " } " >> ${arquivo}.php
echo " ImageString(\$img,4,\$lw*95+17,\$hi-5,\$code[11],\$fg); " >> ${arquivo}.php
echo " /* Output the Header and Content. */ " >> ${arquivo}.php
echo " header(\"Content-Type: image/png\"); " >> ${arquivo}.php
echo " ImagePNG(\$img); " >> ${arquivo}.php
echo "} " >> ${arquivo}.php
echo " " >> ${arquivo}.php
echo "CodigoBarras('${arquivo}'); " >> ${arquivo}.php
echo "?> " >> ${arquivo}.php
done
###################### organização da pagina para impressão
echo "<html> " > index.php
echo "<head> " >> index.php
echo "<title> Codigo de barras</title> " >> index.php
echo "<meta name=\"GENERATOR\" content=\"Quanta Plus\"> " >> index.php
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">" >> index.php
echo "</head> " >> index.php
echo "<body> " >> index.php
echo "<table> " >> index.php
echo "<tbody> " >> index.php
echo "<tr> " >> index.php
echo "<?php " >> index.php
echo "\$cod='10000000000'; " >> index.php
echo "for (\$x=1;\$x<=$quant;\$x++) { " >> index.php
echo "\$cod++; " >> index.php
echo "if (\$x % 3 == 0) { " >> index.php
echo "echo \"</tr><tr>\"; " >> index.php
echo "echo \"<td><IMG src='./\$cod.php' align='left' border='0'></td>\"; " >> index.php
echo "} else { " >> index.php
echo "echo \"<td><IMG src='./\$cod.php' align='left' border='0'></td>\"; " >> index.php
echo "} " >> index.php
echo "} " >> index.php
echo "?> " >> index.php
echo "</tr> " >> index.php
echo "</tbody> " >> index.php
echo "</table> " >> index.php
echo "</body> " >> index.php
echo "</html> " >> index.php

Agora é só dar permissão de execução no arquivo script.sh e rodá-lo. Para alterar o número de códigos de barras é só editar o arquivo, no exemplo mandei fazer uns 500... Depois vá no navegador e digite o endereço "http://localhost/cod/" e pronto.

Eu testei os códigos com um leitor de mão da Bematech BR310 e funciona muito bem. Segue o screen dos códigos gerados:
Linux: Criando codigos de barra seguencias usando Shell Script e 
PHP
Pode parecer uma solução bem grosseira, mas funciona.

Espero que ajude alguém.
;-))

Outras dicas deste autor

Ler arquivos de texto com o Gambas

Revele o sistema com apenas 1 ping

Leitura recomendada

Verificando se um arquivo cabe dentro de um DVD

Configurar Gedit para compilar e executar scripts em PASCAL

Backup em shell script na virtualização de máquinas (VMWare)

Limpando a fila do queue

O Mais Prático ou o Mais Rápido? Alternativa ao cut -c

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts