BARCODER - Crie Códigos de Barras 1D e 2D (QRCode, C39,etc)

Compartilhe seus scripts e funções interessantes
User avatar
Gio
Posts: 226
Joined: 30 Sep 2013, 10:54
Location: Brazil

BARCODER - Crie Códigos de Barras 1D e 2D (QRCode, C39,etc)

17 Nov 2017, 11:52

Olá :angel:

Image

*Clique Aqui se você deseja saber um pouco mais sobre QR Codes e como eles podem ajudar a automatizar os processos logísticos da sua empresa.


Em novembro de 2014 uma atualização de grande porte nos sistemas da minha empresa fez com que tivéssemos que mudar os códigos de barras das etiquetas de 1D para 2D, devido às dimensões limitadas das etiquetas e densidade de informações nos códigos. Então, fui solicitado a criar um gerador de QR Codes que pudesse trabalhar com strings de 32 dígitos.

Quatro dias depois, eu já tinha um gerador que trabalhava com a versão 2-H do QR Code (O número é a versão do QR Codes, e se refere à capacidade de armazenamento, enquanto que a letra significa o nível de auto-correção de erros no códigos - 30% neste caso) e armazenava strings de números, totalmente escrito em AutoHotkey. A melhora na velocidade de leitura das etiquetas impressas foi tamanha que eu logo decidi criar uma biblioteca geradora de QR Codes completa em meu tempo livre. Depois disso, eu também decidi implementar funções para geração de códigos 1D tradicionais como um adicional à biblioteca.

Então, aqui está o resultado:

Biblioteca Geradora de Códigos de Barras v1.02 por Giordanno Sperotto (BARCODER.ahk):
https://www.dropbox.com/s/m5e6c2hy1faedkn/BARCODER.ahk?dl=0

Funções principais (Simplesmente execute estas funções para receber um objeto 1D ((CODE39/CODE ITF/CODE 128) ou 2D (QR CODE) que contém os pixels de uma matriz de código de barras indexados por posição Objeto[Coluna] quando for 1D, Objeto[Linha, Coluna] quando for 2D):
BARCODER_GENERATE_CODE_39(MENSAGEM_A_CODIFICAR) -> Retorna um objeto 1D representando uma linha em CODE39.
BARCODER_GENERATE_CODE_ITF(MENSAGEM_A_CODIFICAR) -> Retorna um objeto 1D representando uma linha em Interleaved 2 of 5.
BARCODER_GENERATE_CODE_128B(MENSAGEM_A_CODIFICAR) -> Retorna um objeto 1D representando uma linha em CODE128.
BARCODER_GENERATE_QR_CODE(MENSAGEM_A_CODIFICAR) -> Retorna um objeto 2D representando uma matriz QR Code.

Criar uma imagem com o objeto retornado por estas funções é uma tarefa fácil graças à biblioteca GDIP escrita por Tic (http://www.autohotkey.com/forum/viewtopic.php?t=32238). Veja os exemplos abaixo.

:arrow: Exemplo 1: Gerando uma imagem de Código de Barras 1D em Code39 (Requer BARCODER.ahk - e GDIP.ahk - e estas bibliotecas devem estar presentes na mesma pasta que o script).

Se você estiver usando uma versão Unicode64 do AutoHotkey, use o arquivo GDIP_All.ahk no lugar de GDIP.ahk e ajuste a linha de #Include para usar este arquivo. O link de download está no mesmo tópico.

Code: [Select all] [Expand] [Download] (Example1-CODE39.ahk)GeSHi © Codebox Plus



:arrow: Exemplo 2: Gerando uma imagem de Código de Barras 2D em QR Code (Requer BARCODER.ahk - e GDIP.ahk - e estas bibliotecas devem estar presentes na mesma pasta que o script).

Se você estiver usando uma versão Unicode64 do AutoHotkey, use o arquivo GDIP_All.ahk no lugar de GDIP.ahk e ajuste a linha de #Include para usar este arquivo. O link de download está no mesmo tópico.

Code: [Select all] [Expand] [Download] (Example2-QR_Code.ahk)GeSHi © Codebox Plus



:arrow: Exemplo 3: Gerando uma imagem de Código de Barras 1D em Interleaved 2 of 5 (Requer BARCODER.ahk - e GDIP.ahk - e estas bibliotecas devem estar presentes na mesma pasta que o script).

Se você estiver usando uma versão Unicode64 do AutoHotkey, use o arquivo GDIP_All.ahk no lugar de GDIP.ahk e ajuste a linha de #Include para usar este arquivo. O link de download está no mesmo tópico.

Code: [Select all] [Expand] [Download] (Example3-CODE_ITF.ahk)GeSHi © Codebox Plus



:arrow: Exemplo 4: Gerando uma imagem de Código de Barras 1D em Code128 Requer BARCODER.ahk - e GDIP.ahk - e estas bibliotecas devem estar presentes na mesma pasta que o script).

Se você estiver usando uma versão Unicode64 do AutoHotkey, use o arquivo GDIP_All.ahk no lugar de GDIP.ahk e ajuste a linha de #Include para usar este arquivo. O link de download está no mesmo tópico.

Code: [Select all] [Expand] [Download] (Example4-CODE128.ahk)GeSHi © Codebox Plus



Algumas observações sobre QR Codes e sobre as opções disponíveis:

1 - Esta biblioteca é totalmente escrita em AutoHotkey (Não possui dependências externas).
2 - QR Codes podem armazenar até: 7089 caracteres numéricos (0-9); ou 4296 Caracteres AlfaNuméricos; ou 2953 bytes (Se você utilizar o último método, quase todos os leitores vão interpretar os bytes através da tabela ASCII, mas é possível usar este método para criar uma rotina para armazenagem de documentos, fotos, ou outros arquivos).
3 - Você pode forçar uma versão (tamanho) da matriz de QR Code no quarto parâmetro da função GENERATE_QR_CODE() se a versão escolhida for grande o bastante para comportar todos a mensagem inserida (isso pode ser útil se você estiver buscando um tamanho padrão de imagem independente da mensagem inserida). No entanto, tenha cuidado: Se uma versão forçada não for grande o bastante para comportar todos os dados inseridos nenhuma matriz QR Code será gerada. As versões do QR Code vão de 1 a 40, sendo que quanto maior o número, maior a matriz.
4 - O nível de correção de erros (ECL) padrão da função foi definido em M (ou 15%). Você pode forçar outro nível de correção de erros no terceiro parâmetro da função se você quiser maior correção (mas isso poderá acarretar em uma matriz maior) ou menor correção (que poderá acarretar em uma matriz menor). Os níveis de correção de erros (ECL) disponíveis para o padrão QR Code são L (7%), M (15%), Q (25%) e H (30%). Os valores correspondentes no parâmetro são 1 for L, 2 for M, 3 for Q and 4 for H.
5 - Os exemplos acima retornar imagens nas quais os módulos ("pontos" individuais) têm 1 pixel de tamanho. É possível, no entanto, usar loops para gerar imagens com módulos de 2 pixels, 3 pixels ou qualquer outro tamanho que você quiser. Verifique este post se você gostaria de um exemplo sobre como mudar o tamanho dos módulos.
6 - Você pode forçar um método de codificação no segundo parâmetro da função GENERATE_QR_CODE() se o novo método for capaz de armazenar todos os dados que você escreveu. Isso não é recomendado, no entanto, já que a função usar a melhor opção disponível para cada caso por padrão e caso o padrão forçado seja incapaz de lidar com todos os caracteres da mensagem, não será gerada nenhuma matriz QR Code.
7 - Se você deseja implementar uma rotina com QR Codes, normalmente não precisa se preocupar em escrever uma função de leitor de QR Code, já que os scanners 2D disponíveis no mercado normalmente já vêm com software de decodificação e auto-digitação da mensagem correspondente.
8 - Se a sua rotina absolutamente precisa que o seu computador decodifique os QR Codes sem um scanner, existem algumas ferramentas freeware que farão o trabalho por você. ZBar, por exemplo (conforme mencionado por JoeWinograd), decodifica QR Codes em uma imagem direto da sua webcam, e é capaz de escrever a mensagem decodificada para o CMD, onde o AutoHotkey pode lê-la usando CMDRet()). Você encontrará um exemplo dessa rotina aqui.

Limitações conhecidas desta versão:
A Codificação de Kanji (Caracteres Japoneses/Koreanos/Chineses) ainda NÃO é suportada por esta versão.

Créditos Adicionais:
1 - Infogulch, por Bin() e Dec() - http://www.autohotkey.com/board/topic/4 ... onversion/
2 - Tic, pela Biblioteca Gdip (usada nos exemplos e recomendada como a biblioteca de escolha para geração das imagens) - http://www.autohotkey.com/forum/viewtopic.php?t=32238
3 - AlphaBravo, pelas funções de Interleaved 2 of 5 e de Code128 barcode.
4 - JoeWinograd, por sugestões e exemplos sobre como ler QR Codes sem um scanner.

HISTÓRICO DE MUDANÇAS:
11 de Dezembro de 2014:
A primeira versão foi disponibilzada em inglês com suporte para geração de CODE39 e QR Code. Foram adicionados exemplos ao tópico.
23 de Dezembro de 2014:
1 - Foram adicionadas as funções de Interleaved 2 of 5 escritas por AlphaBravo.
2 - O nome da biblioteca e das funções foi modificado para permitir o uso da sintaxe MinhaBiblioteca_MinhaFuncao.
25 de Dezembro de 2014:
Foi corrigido um erro ortográfico que acarretava na geração de matrizes 11-M incorretas.
27 de Dezembro de 2014:
1 - Foi realizado um teste em cada uma das 40 versões de QR Codes, usando os 4 tipos de ECLs. Todas as 160 matrizes geradas estavam perfeitamente legíveis.
2 - A versão da biblioteca foi mudada para 1.02 para evitar confusão com a 1.0, que gerava matrizes 11-M incorretas.
3 - Os avisos de erro nas caixas de mensagem foram comentados do códigos para que a função possa operar silenciosamente. A função agora retorna um código de erro de 1 a 7. Verifique as notas do autor na função se você quer ver ou administrar os erros em seu código.
23 de Junho de 2016:
Foram adicionadas funções de Code128 escritas por AlphaBravo.

Espero que esta biblioteca lhe seja útil e fique à vontade para fazer quaisquer perguntas abaixo :thumbup:
"What is a suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
User avatar
Gio
Posts: 226
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: BARCODER - Crie Códigos de Barras 1D e 2D (QRCode, C39,etc)

17 Nov 2017, 11:57

Mas o que é um QR Code?

QR Code significa Código de Resposta Rápida, e é um código de barras 2D (com duas Dimensões, o que significa que a imagem tem informações na horizontal e na vertical). O QR Code é adequado para armazenar dados em etiquetas impressas que possam ser lidos dias, meses e até anos depois. A grande vantagem do QRCode sobre os códigos de barra 1D é que ele pode armazenar uma quantidade muito grande de dados (aproximadamente 3 KiloBytes em um espaço relativamente pequeno) e além disso, esses dados são armazenados com tecnologia de correção de erros (Se a imagem estiver danificada por riscos de caneta, furos ou manchas, ela ainda poderá até lida [até determinado ponto, é claro]). Da mesma forma que os códigos de barras 1D, é importante perceber que um QR Code pode ser impresso em um pedaço de papel qualquer, o que o torna um meio extremamente barato de controlar objetos físicos (como caixas). Além disso, ele possui outras vantagens, como ser facilmente reconhecido por um usuário, poder ser inserido em imagens de marketing com endereços de sites ou ainda transmitir um texto grande (até 4296 letras) sobre um produto junto a uma foto por exemplo.

Outra similaridade é que a maioria dos scanners de códigos de barra 2D disponíveis no mercado já vem com software que decodifica e auto-insere o texto contido em QR Codes, o que faz com que seja desnecessário se preocupar em programar uma rotina de leitura dos mesmos. Até mesmo os celular mais comuns hoje em dia, com sistemas IOs e Android possuem Apps disponíveis gratuitamente nas lojas que decodificam e exibem os dados contidos em imagens QR Code diretamente da câmera do telefone.

Para que serve?

As aplicações são variadas. Imagine que você tem uma empresa que fabrica produtos ou que compra e vende produtos, e você precisa de uma maneira de armazenar informações nas caixas dos produtos (tal como instruções de montagem, informações sobre a data de validade, ou quaisquer outras) que possam ser lidas algum tempo depois por um operador ou cliente. Ao invés de imprimir esta informação em formato de texto nas caixas, ou mesmo em uma etiqueta enorme, você pode simplesmente imprimir um QR Code e toda essa informação já vai estar armazenada lá, para que possa ser decodificada e exibida na tela de qualquer leitor de mão a qualquer hora que o operador quiser.

A decodificação é extremamente rápida com os scanners atuais!

Decodificar 1Kb de texto levou aproximadamente 5 a 6 segundos em um teste rápido com um Iphone 5 (um celular com mais de 5 anos de mercado). Para efeitos de comparação, se um usuário tivesse que digitar 1.000 caracteres em um teclado, considerando a velocidade normal de digitação, levaria aproximadamente 60 vezes esse tempo. Imagine quantas horas de trabalho de digitação de dados impressos você pode economizar na sua empresa?

QR Codes podem armazenar mensagens em código!

Se você deseja segurança na informação, você pode optar por armazenar texto codificado no QR Code, de modo que somente o seu sistema seja capaz de ler as informações. Isso garante a segurança dos dados impressos.

QR Codes são ideias para controlar processos logísticos
Imagines que você precise de uma maneira de garantir que um operador completou uma rotina logística, tal qual mover um produto de um lugar para outro dentro de um grande armazém. Você pode fazer o sistema imprimir etiquetas com um código específico para ser colado na caixa dos produtos, e depois colocar outro usuário em outro lugar do armazém orientado a escanear essas etiquetas das caixas dos produtos e inserir os dados no sistema. Isso vai garantir que o item correto se mexeu para aquele lugar (porque somente o PC daquele lugar roda a rotina de leitura específica) e que isso ocorreu na hora certa (verificando se havia pedido daquele item em aberto no momento da leitura, por exemplo). Vale lembrar que o operador pode ser cego aos dados da etiqueta, basta encriptá-los e fazer apenas o sistema ser capaz de decifrá-los.

E muito mais, dependendo somente da sua criatividade !
Os possíveis usos dessa tecnologia vão muito além desses exemplos, mas o tempo é curto e por enquanto, eu deixarei a parte de bolar as ideias com você programador. Lhe desejo sempre muito sucesso em suas implementações!

Sinta-se libra para perguntar sobre como implementar uma ideia de rotina qualquer que envolva códigos de barras ou algo sobre QR Codes :thumbup:
"What is a suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!

Return to “Scripts e Funções”

Who is online

Users browsing this forum: No registered users and 1 guest