Pular para o conteúdo

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

Dica publicada em Shell Script / Avançado
Hudson Moreira Guimaraes dos Santos hudyfx
Hits: 12.106 Categoria: Shell Script Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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.
;-))

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Ler arquivos de texto com o Gambas

Revele o sistema com apenas 1 ping

Gerenciador de pacotes em SHELL SCRIPT - PKGMGR

Kernel for Newbies - seu assistente de compilação do Kernel em 10 simples passos

Políticas personalizadas do SELinux

sshpass - Passando senha como parâmetro no SSH e scp sem registro de chave pública

Testando se a conexão com a internet está ativa

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.