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

Compartilhe seus scripts, funções, ferramentas e programas

Moderator: Gio

User avatar
Gio
Posts: 1247
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/gwryp5d3iarku ... R.ahk?dl=1

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

#SingleInstance, Force
SetBatchLines, -1

START:
inputbox, Test,, Escreva uma mensagem e uma imagem de código de barras em CODE39 correspondente será gerada e salva na pasta em que este script está.

MATRIX_TO_PRINT := BARCODER_GENERATE_CODE_39(test)

if (MATRIX_TO_PRINT = 1)
{
	Msgbox, 0x10, Erro, A mensagem inserida está em branco ou contém caracteres que não podem ser codificados em CODE_39. Você só pode codificar os seguintes caracteres em CODE39: Letras MAIUSCULAS, Dígitos (0-9) e os símbolos `$, `%, `+, `-, `. and `/. Por favor ajuste a mensagem inserida de acordo com estas instruções ou utilize outro tipo de código de barras.
	Goto START
}

; Start gdi+
If !pToken := Gdip_Startup()
{
	MsgBox, 48, Erro, Não foi possível iniciar a biblioteca Gdiplus. Por favor, tente novamente ou verifique se você tem gdiplus no seu sistema.
	ExitApp
}

HEIGHT_OF_IMAGE := 20 ; 20 é a altura do código de barras para este exemplo. Você pode mudar o número para obter qualquer outro tamanho que quiser.

pBitmap := Gdip_CreateBitmap(MATRIX_TO_PRINT.MaxIndex() + 8, HEIGHT_OF_IMAGE) ; Adding 8 pixels to the width here as a "quiet zone" for the image. This serves to improve the printed code readability.
G := Gdip_GraphicsFromImage(pBitmap)
Gdip_SetSmoothingMode(pBitmap, 3)
pBrush := Gdip_BrushCreateSolid(0xFFFFFFFF)
Gdip_FillRectangle(G, pBrush, 0, 0, MATRIX_TO_PRINT.MaxIndex() + 8, HEIGHT_OF_IMAGE) ; Same as above
Gdip_DeleteBrush(pBrush)

	
Loop % HEIGHT_OF_IMAGE
{
	CURRENT_ROW := A_Index
	Loop % MATRIX_TO_PRINT.MaxIndex()
	{
		CURRENT_COLUMN := A_Index
		If (MATRIX_TO_PRINT[A_Index] = 1)	
		{
			Gdip_SetPixel(pBitmap, CURRENT_COLUMN + 3, CURRENT_ROW, 0xFF000000) ; Adding 3 to the current column and the current row to skip the quiet zones.
		}
	}
}
	
CURRENT_ROW := "", CURRENT_COLUMN := ""
	
StringReplace, FILE_NAME_TO_USE, test, `" ; We can't use all the characters that byte mode can encode in the name of the file. So we are replacing them here (if they exist).
FILE_PATH_AND_NAME := A_ScriptDir . "\" . SubStr(RegExReplace(FILE_NAME_TO_USE, "[\t\r\n\\\/\`:\`?\`*\`|\`>\`<]"), 1, 20) . ".png" ; Same as above. We will only use the first 20 characters for the file name in this example.
Gdip_SaveBitmapToFile(pBitmap, FILE_PATH_AND_NAME)
Gdip_DisposeImage(pBitmap)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)

msgbox, 0, Success, Imagem em CODE39 gerada com sucesso!
Goto START

Return
#Include %A_ScriptDir%/BARCODER.ahk
#Include %A_ScriptDir%/GDIP.ahk
: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

#SingleInstance, Force
SetBatchLines, -1

START:
inputbox, Test,, Escreva uma mensagem e uma imagem de código de barras em QR Code correspondente será gerada e salva na pasta em que este script está.

MATRIX_TO_PRINT := BARCODER_GENERATE_QR_CODE(test)
if (MATRIX_TO_PRINT = 1)
{
	Msgbox, 0x10, Error, A mensagem inserida está em branco. Por favor insira uma mensagem para gerar uma imagem em QR Code com sucesso.
	Goto START
}

If MATRIX_TO_PRINT between 1 and 7
{
	Msgbox, 0x10, Error, ERROR CODE: %MATRIX_TO_PRINT% `n`nERROR CODE TABLE:`n`n1 - Input message is blank.`n2 - The Choosen Code Mode cannot encode all the characters in the input message.`n3 - Choosen Code Mode does not correspond to one of the currently indexed code modes (Automatic, numeric, alphanumeric or byte).`n4 - The choosen forced QR Matrix version (size) cannot encode the entire input message using the choosen ECL Code_Mode. Try forcing a higher version or choosing automated version selection (parameter value 0).`n5 - The input message is exceeding the QR Code standards maximum length for the choosen ECL and Code Mode.`n6 - Choosen Error Correction Level does not correspond to one of the standard ECLs (L, M, Q and H).`n7 - Forced version does not correspond to one of the QR Code standards versions.
	Goto START
}

	; Start gdi+
	If !pToken := Gdip_Startup()
	{
		MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
		ExitApp
	}

	pBitmap := Gdip_CreateBitmap(MATRIX_TO_PRINT.MaxIndex() + 8, MATRIX_TO_PRINT.MaxIndex() + 8) ; Adding 8 pixels to the width and height here as a "quiet zone" for the image. This serves to improve the printed code readability. QR Code specs require the quiet zones to surround the whole image and to be at least 4 modules wide (4 on each side = 8 total width added to the image). Don't forget to increase this number accordingly if you plan to change the pixel size of each module.
	G := Gdip_GraphicsFromImage(pBitmap)
	Gdip_SetSmoothingMode(pBitmap, 3)
	pBrush := Gdip_BrushCreateSolid(0xFFFFFFFF)
	Gdip_FillRectangle(G, pBrush, 0, 0, MATRIX_TO_PRINT.MaxIndex() + 8, MATRIX_TO_PRINT.MaxIndex() + 8) ; Same as above.
	Gdip_DeleteBrush(pBrush)

	Loop % MATRIX_TO_PRINT.MaxIndex() ; Acess the Rows of the Matrix
	{
		CURRENT_ROW := A_Index
		Loop % MATRIX_TO_PRINT[1].MaxIndex() ; Access the modules (Columns of the Rows).
		{
			If (MATRIX_TO_PRINT[CURRENT_ROW, A_Index] = 1)
			{
				Gdip_SetPixel(pBitmap, A_Index + 3, CURRENT_ROW + 3, 0xFF000000) ; Adding 3 to the current column and row to skip the quiet zones.
			}
		}
	}
	StringReplace, FILE_NAME_TO_USE, test, `" ; We can't use all the characters that byte mode can encode in the name of the file. So we are replacing them here (if they exist).
	FILE_PATH_AND_NAME := A_ScriptDir . "\" . SubStr(RegExReplace(FILE_NAME_TO_USE, "[\t\r\n\\\/\`:\`?\`*\`|\`>\`<]"), 1, 20) . ".png" ; Same as above. We will only use the first 20 characters for the file name in this example.
	Gdip_SaveBitmapToFile(pBitmap, FILE_PATH_AND_NAME)
	Gdip_DisposeImage(pBitmap)
	Gdip_DeleteGraphics(G)
	Gdip_Shutdown(pToken)

MsgBox,0,Sucesso, Uma imagem em QR Code foi criada no endereço `n%FILE_PATH_AND_NAME%
Goto START
Return
#Include %A_ScriptDir%/BARCODER.ahk
#Include %A_ScriptDir%/GDIP.ahk
: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

#SingleInstance, Force
SetBatchLines, -1


START:
inputbox, Test,, Escreva uma mensagem e uma imagem correspondente de código de barras em CODE_ITF será gerada e salva na mesma pasta em que o script está.

If (Test = "")
{
	msgbox, 0x10, Error, A mensagem inserida está em branco. Por favor, insira uma mensagem para gerar com sucesso uma imagem de Código de Barras em CODE_ITF. 
	Goto START
}

MATRIX_TO_PRINT := BARCODER_GENERATE_CODE_ITF(test)

if (MATRIX_TO_PRINT = 1)
{
	msgbox, 0x10, Error, The input string contains characters that cannot be encoded in an INTERLEAVED 2 OF 5 Barcode. Please correct the message or choose another type of barcode. `n`nYou can only encode numeric strings (0-9) in an INTERLEAVED 2 OF 5 Barcode.
   Goto START
}

; Start gdi+
If !pToken := Gdip_Startup()
{
   MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
   ExitApp
}

HEIGHT_OF_IMAGE := 20 ; 20 é a altura do código de barras para este exemplo. Você pode mudar o número para obter qualquer outro tamanho que quiser.

pBitmap := Gdip_CreateBitmap(MATRIX_TO_PRINT.MaxIndex() + 8, HEIGHT_OF_IMAGE) ; Adding 8 pixels here as a "quiet zone" for the image. This serves to improve the printed code readability.
G := Gdip_GraphicsFromImage(pBitmap)
Gdip_SetSmoothingMode(pBitmap, 3)
pBrush := Gdip_BrushCreateSolid(0xFFFFFFFF)
Gdip_FillRectangle(G, pBrush, 0, 0, MATRIX_TO_PRINT.MaxIndex() + 8, HEIGHT_OF_IMAGE)
Gdip_DeleteBrush(pBrush)

   
Loop % HEIGHT_OF_IMAGE
{
   CURRENT_ROW := A_Index
   Loop % MATRIX_TO_PRINT.MaxIndex()
   {
      CURRENT_COLUMN := A_Index
      If (MATRIX_TO_PRINT[A_Index] = 1)   
      {
         Gdip_SetPixel(pBitmap, CURRENT_COLUMN + 3, CURRENT_ROW, 0xFF000000) ; Adding 3 to the current column to skip the quiet zone.
      }
   }
}
   
CURRENT_ROW := "", CURRENT_COLUMN := ""
   
StringReplace, FILE_NAME_TO_USE, test, `" ; We can't use all the characters that byte mode can encode in the name of the file. So we are replacing them here (if they exist).
FILE_PATH_AND_NAME := A_ScriptDir . "\" . SubStr(RegExReplace(FILE_NAME_TO_USE, "[\t\r\n\\\/\`:\`?\`*\`|\`>\`<]"), 1, 20) . ".png" ; Same as above. We will only use the first 20 characters for the file name in this example.
Gdip_SaveBitmapToFile(pBitmap, FILE_PATH_AND_NAME)
Gdip_DisposeImage(pBitmap)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)

msgbox, 0, Sucesso, Imagem em CODE2OF5 gerada com sucesso!
Goto START

Return
#Include %A_ScriptDir%/BARCODER.ahk
#Include %A_ScriptDir%/GDIP.ahk
: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

#SingleInstance, Force
SetBatchLines, -1
 
START:
inputbox, Test,, Escreva uma mensagem é uma imagem de código de barras 1D em CODE128 correspondente será gerada e salva na pasta em que este script está.
 
MATRIX_TO_PRINT := BARCODER_GENERATE_CODE_128B(test)
 
if (MATRIX_TO_PRINT = 1)
{
	Msgbox, 0x10, Error, A mensagem inserida está em branco ou contém caracteres que não podem ser codificados em CODE_128. Por favor, escreva uma mensagem com os caracteres aceitos ou utilize outro método de geração de códigos de barras.
	Goto START
}
 
; Start gdi+
If !pToken := Gdip_Startup()
{
	MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
	ExitApp
}
 
HEIGHT_OF_IMAGE := 20 ; 20 é a altura do código de barras para este exemplo. Você pode mudar o número para obter qualquer outro tamanho que quiser.
 
pBitmap := Gdip_CreateBitmap(MATRIX_TO_PRINT.MaxIndex() + 8, HEIGHT_OF_IMAGE) ; Adding 8 pixels to the width here as a "quiet zone" for the image. This serves to improve the printed code readability.
G := Gdip_GraphicsFromImage(pBitmap)
Gdip_SetSmoothingMode(pBitmap, 3)
pBrush := Gdip_BrushCreateSolid(0xFFFFFFFF)
Gdip_FillRectangle(G, pBrush, 0, 0, MATRIX_TO_PRINT.MaxIndex() + 8, HEIGHT_OF_IMAGE) ; Same as above
Gdip_DeleteBrush(pBrush)
 
 
Loop % HEIGHT_OF_IMAGE
{
	CURRENT_ROW := A_Index
	Loop % MATRIX_TO_PRINT.MaxIndex()
	{
		CURRENT_COLUMN := A_Index
		If (MATRIX_TO_PRINT[A_Index] = 1)	
		{
			Gdip_SetPixel(pBitmap, CURRENT_COLUMN + 3, CURRENT_ROW, 0xFF000000) ; Adding 3 to the current column and the current row to skip the quiet zones.
		}
	}
}
 
CURRENT_ROW := "", CURRENT_COLUMN := ""
 
StringReplace, FILE_NAME_TO_USE, test, `" ; We can't use all the characters that byte mode can encode in the name of the file. So we are replacing them here (if they exist).
FILE_PATH_AND_NAME := A_ScriptDir . "\" . SubStr(RegExReplace(FILE_NAME_TO_USE, "[\t\r\n\\\/\`:\`?\`*\`|\`>\`<]"), 1, 20) . ".png" ; Same as above. We will only use the first 20 characters for the file name in this example.
Gdip_SaveBitmapToFile(pBitmap, FILE_PATH_AND_NAME)
Gdip_DisposeImage(pBitmap)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)
 
msgbox, 0, Sucesso, Imagem em CODE128 gerada com sucesso!
Goto START
 
Return
#Include %A_ScriptDir%/BARCODER.ahk
#Include %A_ScriptDir%/GDIP.ahk

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:
User avatar
Gio
Posts: 1247
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:

Return to “Scripts e Funções”

Who is online

Users browsing this forum: No registered users and 20 guests