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

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

[ Hits: 9.300 ]

 


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

Script para o netfilter (iptables)

Jogo da Forca em Shell Script

Script para adicionar hosts no Nagios

Criando um arquivo .tar auto-instalável

Como criar um cronômetro em modo texto

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário