Académique Documents
Professionnel Documents
Culture Documents
hl=ptBR&source=hp&q=padres+de+cdigo+de+barras&btnG=Pesquisa+Googl e&meta=&aq=0&oq=padroes+de+codi
Cdigo de barras
INTRODUO
Quem se lembra da operao de varejo no Brasil antes dos anos 90, quando a tecnologia era proibida por aqui, sabe a grandeza que representa a automao comercial. Nos supermercados, por exemplo, o funcionrio do caixa procurava a etiqueta de preo de cada item e digitava o valor em sua mquina registradora, fazendo a soma. Muito usual tambm era ver uma empresa do comrcio fechada para inventrio, visto que o controle era praticamente todo manual e demandava muito tempo, espao e pessoas. Apenas as lojas menores podiam se dar ao luxo de conhecer mais de perto os clientes: anotava-se em sua ficha, ou na caderneta, os produtos comprados e os pagamentos realizados. Neste quadro cabe muito bem a expresso: isto coisa do sculo passado! Mas lembre-se: faz menos de 15 anos... Com a (tardia) entrada dos microcomputadores no Brasil, houve uma revoluo na administrao de varejo. O funcionrio do caixa, ao invs de simplesmente somar preos, passou a entrar com o cdigo dos produtos, e o sistema informatizado fazia o resto: totalizava as vendas, dava baixa no estoque, emitia relatrios atualizados, informava a comisso dos vendedores e tudo mais. Foi um enorme salto de produtividade. Mesmo assim, ainda era possvel melhorar: ao invs do usurio entrar com os dados, por que no o prprio sistema captur-lo? aqui que entra o cdigo de barras, uma tecnologia aplicada a muitas reas: indstria, comrcio, bancos, bibliotecas, hospitais, bancos de sangue, correios, transportes, controles de acesso etc. Apresentarei neste artigo algumas solues de cdigos de barras aplicadas ao comrcio. Inicio da pagina
Alm de haver diferentes combinaes de barras, alguns cdigos possuem um contedo de dados padronizado, ou seja, a seqncia de nmeros representados organizada de uma determinada forma (cada posio tem um significado). Isto ocorre, por exemplo, com o EAN13, UPC12 e demais padres de codificao estabelecidos e controlados internacionalmente. Outros cdigos, como o 39, so livres, ou seja, quem for us-lo tem a liberdade de posicionar os nmeros e letras livremente. A principal vantagem de se trabalhar com um padro internacional rgido que cada produto ter seu cdigo exclusivo, aplicvel no mundo inteiro, sem repetio, o que possibilita a integrao e a troca de informaes entre os vrios elos da cadeia produtiva: do fabricante ao consumidor final, o cdigo acompanha o produto. A contrapartida a burocracia: a empresa deve se cadastrar no rgo responsvel (EAN - European Article Numbering - responsvel pelos cdigos no mundo inteiro, exceto Estados Unidos e Canad, em que o responsvel o UCC - Uniform Code Council), a fim de receber um ID que a identificar exclusivamente dentro do cdigo de barras. evidente que sem tal burocracia seria impossvel existir este sistema organizado de codificao em escala global. J os cdigos livres (no padronizados) tm a vantagem de permitir sua personalizao, criando uma lgica para incluir todas as informaes que precisa (veja o Box 1 - Cdigo interno personalizado). possvel, por exemplo, criar um cdigo que contenha a sigla do fornecedor, o cdigo da categoria, o cdigo da linha, o cdigo da cor, e qualquer informao que permita empresa descrever um produto apenas olhando seu cdigo. possvel, at mesmo, incluir neste cdigo o nmero de srie do produto, para acompanh-lo individualmente, fornecendo uma informao valiosa empresa. Por outro lado, a abrangncia do cdigo no padronizado se limita prpria empresa (ou a um determinado grupo que compartilhe a mesma lgica em seu sistema). Inicio da pagina
O PAPEL DO APLICATIVO
muito importante entender que quem deve se preocupar com a leitura das barras o leitor ptico: ele foi criado para esta nica finalidade. O aplicativo, por sua vez, deve se preocupar em entender o contedo que as barras representam, ou seja, os caracteres que foram interpretados pelo leitor ptico. Eu friso este ponto porque justamente nele que muitos desenvolvedores ficam em dvida: como fazer meu aplicativo entender as barras? A resposta simples: o aplicativo no precisa entender as barras, mas sim o contedo delas. O leitor ptico faz a leitura e retorna o resultado (ex: 9771414305005). O trabalho do aplicativo deve ser tratar o 9771414305005 (buscando o ID na tabela de produtos, gravando nos detalhes de venda, imprimindo o item no cupom fiscal, etc.). Inicio da pagina
3 de 9: um cdigo simples de ser gerado, aceita letras e nmeros e livre. Sua simbologia no densa, dispensando o uso de dgito verificador (que usado nos outros padres para garantir que a leitura foi feita corretamente). Costuma ser usado para codificaes internas de empresas que necessitam de caracteres alfa-numricos (indstrias, companhias areas, etc.), mas tambm usado em aplicaes comerciais. Em geral, os sistemas no Brasil esto modelados para receber cdigo de 13 posies (embora a EAN recomende 14), o que possibilita trabalhar tambm com cdigos de 8 (EAN8/UPC-E) e 12 (UPC-A) posies. O mesmo no se aplica aos sistemas norte-americanos, configurados para receber apenas 12 posies, dificultando o trabalho com EAN13. Entretanto, h um acordo entre a EAN e a UCC para que esta situao seja corrigida at 2005. Inicio da pagina
GERANDO EAN13
Na edio 23 da FrumAccess foi publicado um artigo pioneiro sobre cdigo de barras no Access, de autoria do Mauro Possato, o qual considero de leitura obrigatria a quem vai trabalhar com este recurso. O artigo explica o clculo do dgito verificador e todo o cdigo necessrio para se gerar as etiquetas, e ainda inclui um MDB de exemplo (Ean13.mdb), que pode ser encontrado no CD Enciclopdia FrumAccess (outra fonte indispensvel de estudo), ou na seo de downloads do FrumAccess (www.forumaccess.com.br/novo/downloads.asp, no link da Revista 23). Uma outra forma de se gerar cdigo de barras EAN13 usar o ActiveX Chromatick BarCode, que freeware e pode ser encontrado para download em sites como VbMania e VbBrasil, e tambm foi includo no arquivo de exemplo deste artigo. Para us-lo, copie os arquivos CTKBCDC.OCX e CTKBCDC.DEP na pasta de sistema do Windows (c:\Windows\System ou c:\WINNT\System32, dependendo do sistema operacional) e faa o registro digitando Regsvr32 CTKBCDC.ocx na linha de comando do Iniciar/Executar do Windows (Figura 1).
Feito o registro, os controles dos cdigos de barras podero ser colocados em relatrios do Access como qualquer outro controle, bastando abrir a caixa de ferramentas e clicar no boto Mais Controles (Figura 2), selecionar na lista e dimensionar no relatrio.
Figura 2 - Listagem Mais Controles No arquivo de exemplo deste artigo, que deve ser usado para acompanhar os prximos itens, criei um relatrio a partir do Assistente de Etiqueta e inclu os campos de cdigo do produto (CodBarras - deixei invisvel), descrio e preo. Coloquei o controle ctk_BarCode.EAN13 para exibir as barras (Figura 3), dando-lhe o nome de ctkEAN13.
Figura 3 - Estrutura do relatrio Veja que o controle ActiveX fica configurado para imprimir zeros, ento preciso informar, em tempo de execuo, o valor que dever estar contidos nas barras (ou seja, o contedo do campo CodBarras), na propriedade Code. Para isto, pode ser usado o evento Ao Imprimir da seo detalhe, com a seguinte linha de cdigo:
Me.ctkEAN13.Code = Me.CodBarras
GERANDO EAN8
Para gerar o cdigo EAN8, voc pode usar o mesmo componente, porm incluindo o controle ctk_BarCode.EAN8 no relatrio, dando-lhe o nome de ctkEAN8. Siga os mesmos passos descritos anteriormente, lembrando de ajustar o nome do controle na linha de cdigo do evento Ao Imprimir da seo:
Me.ctkEAN8.Code = Me.CodBarras
O cdigo de barras EAN8 tem a aparncia mostrada na Figura 5.
GERANDO CDIGO 3 DE 9
O cdigo de barras 3 de 9 (ou Barcode39) bastante usado para cdigos personalizados, e tem a flexibilidade de imprimir letras e caracteres especiais, aumentando bastante a possibilidade de aplicao. Uma das formas de ger-lo usar o mesmo componente ctk_BarCode j explicado nos tpicos anteriores, porm selecionando o controle Code39. Como neste cdigo os caracteres no so exibidos em formato humano-legvel, recomendvel deixar visvel uma caixa de texto com o cdigo do produto, para que o operador possa digit-lo caso a leitura ptica falhe. Entretanto, a melhor forma de se trabalhar no Access com o Barcode39 por meio de cdigo. No arquivo de exemplo deste artigo coloquei as funes necessrias para isto: a funo MD_BC39 retorna a composio binria (de 9 dgitos) de cada letra, nmero e caractere especial suportados pelo Barcode39. J a funo MD_Barcode39 usa essa composio de binrios para gerar as barras pretas e brancas em um controle do relatrio (o nome do controle e do relatrio so passados como parmetros). No coloquei estas funes aqui porque so extensas e esto fora do escopo do artigo, mas quem tiver curiosidade pode analisar o mdulo basCodBar39 do arquivo de exemplo. J no relatrio, basta criar uma caixa de texto (Barcode39) para receber as barras, e outra com o nome (CodBarras) para exibir o cdigo em formato humano-legvel. No evento Ao Imprimir da seo detalhe, coloque uma linha de cdigo para chamar a funo MD_Barcode39:
O primeiro parmetro o nome do controle em que aparecero as barras (Barcode39), o segundo parmetro faz referncia ao relatrio atual (Me). O resultado exibido na Figura 6.
O cdigo 3 de 9, alm de letras e nmeros, tambm imprime espao, $ (cifro), % (porcentagem), + (mais), | (pipe), . (ponto), - (hfen) e / (barra). Uma terceira forma de se trabalhar com o cdigo 39 usar uma fonte TrueType. possvel fazer download de uma fonte gratuita no endereo www.squaregear.net/fonts/free3of9.shtml, a qual tambm foi includa no arquivo de exemplo deste artigo. Para us-la, copie os arquivos FREE3OF9.TTF (Free 3 of 9 - para nmeros) e FRE3OF9X.TTF (Free 3 of 9 Extended - alfanumrica) para a pasta de fontes do Windows. Em seguida, abra o Painel de Controle e o cone Fontes. Abra o menu Arquivo/Instalar nova fonte, selecione a pasta de fontes e selecione os dois arquivos TTF, conforme indica a Figura 7.
Figura 7 - Instalao de fontes TrueType Com as fontes instaladas, crie uma caixa de texto no relatrio do Access e selecione Free 3 of 9 Extended como propriedade Nome da Fonte. Na origem do controle, necessrio colocar os caracteres de abertura e fechamento, que so smbolos procurados pelo leitor ptico para iniciar e finalizar a leitura. No caso do cdigo 3 de 9, o caractere o asterisco (*). Assim, na origem do controle coloque:
IMPRESSORA TRMICA
Para quem precisa imprimir grande quantidade de etiquetas, uma soluo mais econmica usar uma impressora trmica (etiquetadora). Embora seja um equipamento bem mais caro que uma impressora jato de tinta comum, a economia com suprimentos (2 ou 3 cartuchos de tinta custam mais que a prpria impressora) grande. Essas etiquetadoras so muito comuns em aeroportos, usadas para emitir as etiquetas com a sigla do aeroporto de destino afixadas nas malas, e tambm os cartes de embarque. Funcionam com um rolo de etiquetas e outro de fita preta (ribbon), suprimentos de baixo custo. O ribbon aquecido na cabea de impresso, de forma a gravar texto, barras e imagens na etiqueta. O sensor do equipamento pode detectar onde acaba uma etiqueta e comea outra. O equipamento ligado na porta serial do micro, e para control-lo pode-se usar o ActiveX MSCOMM32.OCX, que vem no Visual Basic, e tambm est disponvel no material de download da edio 35 da FrumAccess (no artigo Coletando dados com Access). O cdigo a seguir pode ser usado para imprimir etiquetas em impressora Datamax, uma das mais usadas no mercado:
Dim intPorta As Integer Dim strTexto As String On Error GoTo Tratamento MSComm1.CommPort = 1 COM1 Configura a porta serial MSComm1.Settings = 9600,n,8,2 Controla o Fluxo de Dados MSComm1.Handshaking = comRTSXOnXOff Abre a porta serial MSComm1.PortOpen = True Define um avano no papel aps a impresso MSComm1.Output = ~f256 & Chr$(13) Define o Off set de coluna MSComm1.Output = ~LC0005 & Chr$(13) Define o Off set de linha MSComm1.Output = R0000 & Chr$(13) Define o tamanho do Pixel. MSComm1.Output = D11 & Chr$(13) Seleciona o zero no cortado MSComm1.Output = z & Chr$(13) Define o calor de impresso. MSComm1.Output = H09 & Chr$(13) CAMPOS DA ETIQUETA: MSComm1.Output = 102200100650025 & _ SOFTWARE & Chr$(13) Categoria MSComm1.Output = 102200100550015 & _ VISUAL BASIC & Chr$(13) MSComm1.Output = 102200100550095 & _ MICROSOFT & Chr$(13) Marca MSComm1.Output = 102200100450015 & _ STANDARD & Chr$(13) Tipo MSComm1.Output = 102200100450105 & _ 2003 & Chr$(13) Verso MSComm1.Output = 102200100350015 & _ .NET & Chr$(13) Famlia MSComm1.Output = 102200100350095 & _ 65955690 & Chr$(13) Cdigo MSComm1.Output = 102200100250015 & _ FERRAMENTA DESENV & Chr$(13) Descrio Cdigo de barras (segunda letra minscula) MSComm1.Output = 1e1202500000015 & _ 65955690 & Chr$(13) letra e: padro 128 MSComm1.Output = 121100100150145 & _ R$ & Chr$(13) Preo (cifro) MSComm1.Output = 121100100050145 & _ 500 & Chr$(13) Preo MSComm1.Output = Q & Format(1, 0000) & _ Chr$(13) Quantidade de cpias da etiqueta Termina a transmisso e inicia a impresso MSComm1.Output = E & Chr$(13) Do Until MSComm1.OutBufferCount = 0 Loop MSComm1.PortOpen = False Fecha a porta Exit Sub Tratamento: If Err = 8002 Then MsgBox Porta serial invlida. Exit Sub End If MsgBox Err.Description End Sub
Algumas impressoras no usam o til ~ como caractere inicial, mas sim o ^B. Neste caso, o til deve ser trocado por Chr(02) no cdigo anterior. Na linha de comando do cdigo de barras, a letra e representa o cdigo de barras 128, mas poderiam ser usadas as seguintes letras: a - cdigo 39, b - UPC-A, c - UPC-E, d - I25, f EAN-13, g - EAN-8, h - HIBC, i - Codabar, j - I25+CD, k - Plessey, l - Case, m UPC+2, n - UPC+5, o - 93, v - UPC peso varivel, q - UCC-EAN128. Dica: a cabea de impresso tem vida til. Aps alguns milhares de etiquetas impressas, ela vai se desgastando e as etiquetas comeam a apresentar algumas falhas (riscos brancos bem finos). Se levar na assistncia tcnica, eles vo sugerir a troca da pea (que bastante cara). Entretanto, como as etiquetas geralmente so bem mais estreitas que o cabeote, possvel posicionar o rolo inteiro mais direita e configurar o Off-Set de coluna (ver cdigo anterior) para que a impresso comece em outro lugar. Desta forma voc foge das falhas e aumenta bastante a vida til da pea, trocando-a apenas quando estiver inteiramente gasta. Por isto, procure sempre comear a imprimir em um dos cantos. Inicio da pagina
maior giro, tendncias de cada estao, cores e materiais mais procurados, tamanhos que no vendem, e muitas outras opes). Inicio da pagina
CONCLUSO
Espero ter contribudo aqui com o seu entendimento sobre a tecnologia de cdigo de barras, que embora no seja nova, ainda um mistrio para muitos desenvolvedores. Conforme o artigo mostrou, h diversas maneiras de se trabalhar com estes recursos. O importante saber analisar o caso concreto e escolher a soluo que melhor atenda os objetivos. Embora haja muitos detalhes e regras, o conceito de funcionamento do cdigo de barras simples. Todas as vantagens aqui apresentadas (produtividade, melhor qualidade das informaes, cruzamento de dados, etc.) no derivam do cdigo de barras, mas sim de um banco de dados bem modelado. Sem isto, as barras pouco ajudaro. Juntando as duas partes (entrada de dados com qualidade e boa modelagem do banco de dados), o sistema ser uma boa ferramenta de gesto, e os relatrios sero mais confiveis. Matrias Relacionadas: Revista 23 - Cdigo de barras EAN13 Revista 35 - Coletores de dados Revista 40 - Cdigo de barras no VB/Crystal Reports Revista 41 - Boletos bancrios no Access Para se aprofundar: Site EAN Brasil: www.eanbrasil.com.br * Luiz Cludio C. V. da Rocha (lui@link.com.br) administrador de empresas e advogado, atua na rea de desenvolvimento de sistemas e colaborador no GD FrumAccess. Inicio da pagina
Vou deixar bem claro uma coisa antes de iniciar o artigo: devido a complexidade e extenso do assunto nosso objetivo principal ser abordar os conceitos bsicos e dar um orientao bsica para que cada um , na medida de sua necessidade saiba onde procurar as informaes. Para aplicaes comerciais existem muitas solues ,e , cada caso um caso particular. Para imprimir cdigos de barras no Visual Basic e no Crystal Reports usaremos fontes especficas para este propsito , talvez essa no seja a soluo para o seu problema , mas que fique bem claro que para uso comercial um componente de terceiros quase sempre a melhor opo. Por questo de espao estarei disponibilizando somente parte das fontes usadas. Todas as fontes e manuais de referncia para cdigo de barras esto presentes no Super CD VB - 2001.
Conceitos Bsicos
Para compreender como as informaes so codificadas em cdigo de barra fundamental que se tenha os seguintes conceitos. Vejamos os principais: Barra - Consiste na parte escura do cdigo(normalmente preta), ela absorve a luz e codifica um em cada modulo de barra . Espao - Consiste na parte clara do cdigo (geralmente o fundo que o cdigo impresso) , ele reflete a luz e cada modulo codificado como zero. Caractere - Cada numero ou letra codificado com barra e espao. Cada caractere pode ser modificado por tantos 1 ou 0 quantos forem os mdulos contidos na sua codificao. Caractere inicial final - Indicam ao leitor de cdigo o respectivamente o inicio e o fim do cdigo estes caractere pode ser representado por uma letra ,um numero ou um outro smbolo dependendo do padro do cdigo em questo. Separadores - Os separadores serve para indicar as extremidade do cdigo e indicar ao leitor o sentido que o cdigo esta sendo lido. Este separadores serve tambm para permitir que o cdigo seja lido nos dois sentidos.
Zonas mudas - Tambm conhecida como Quites Zones, so nada mais que margens antes do caractere inicial e depois do caractere final formadas por espaos. Elas so extremamente importantes para o reconhecimento do cdigo pr parte do leitor, e se forem excludas podero impossibilitar a interpretao do cdigo de barra, gerando assim, uma leitura nula.
Sinais de enquadramento - Delimitam uma rea retangular da qual deve estar contidos todos os elementos de cdigo e somente ele.
Densidade do cdigo de barra - caracterizada pela relao entre a quantidade de mdulos ou caracteres e o espao ocupado pelos mesmo uma vez impressos. Modulo - O modulo consiste no elemento mais estreito do cdigo, seja ele uma barra ou espao. Os separadores, as zonas mudas, os caracteres especiais, ou seja, todos os elementos que compem o cdigo de barra so mltiplos do modulo quanto a largura. Isto posto, podemos dizer que o modulo a unidade mnima e bsica componente do cdigo de barra cujo tamanho e definido diretamente pela densidade do cdigo. Flag - Ele empregado no sistema EAN no inicio do cdigo para indica o pas de origem do produto. J no UPC ele tambm situa no inicio do cdigo mas ele indica o tipo de produto. Dgito verificador - utilizado para detectar erros durante a varredura, evitando assim a leitura errnea, e tambm adulteraes, ele constitudo pr um elemento includo no cdigo que calculado a parir de um algoritmo que emprega os demais nmeros do cdigo.
Como os dados so codificados em barras Pr uma mera conveno, identificaremos o digito zero como uma seqncia de cinco barras :barra estreita, barra estreita, barra larga, barra larga e barra estreita, espaadas por espaos em branco. Assim, o digito 0 codificado ficaria dessa maneira:
Os digito de 0 - 9 ficaria :
refletida gera um outro sinal digital que caracteriza a barra, assim, cada caractere do cdigo interpretado como um numero binrio, onde cada modulo reproduz um digito 0 ( reflexo da luz pelo cdigo, ou seja , espao no cdigo ), ou um digito 1 (absoro da luz pelo cdigo, ou seja, barra no cdigo). Observe a figura abaixo: Decodificao Decodificar um cdigo de barra transformar os sinais eltricos de um dispositivo leitor de cdigo de barra em um caractere correspondente de acordo com o padro do cdigo utilizado. Assim, no exemplo anterior , a decodificao do cdigo lido se daria da seguinte maneira: o decodificador obtm as informaes : barra estreita, barra estreita, barra larga, barra larga e barra estreita, e utilizandose a tabela de codificao do cdigo 25, pr exemplo, obtm como caractere lido o digito 0 . Aps uma etiqueta ser lida e de codificada, o resultado pode ser transferido para o equipamento de (PDV, microcomputador, etc.) de diversas maneiras tais como : via teclado, via interface RS-232C (serial) ou outra interface especifica tais como placas particulares ou interface joystick, por exemplo.
EAN-13 - Padro adotado pela ABAC (EAN Brasil) para codificao de produtos
em supermercados, permite a codificao de at 13 dgitos numricos.
intercalado. 2 de 5 - significa que 5 barras definem 1 caracter, sendo que duas delas so
barras largas;
f) Data de Vencimento No caso de ser utilizada a data de vencimento (AAAAMMDD), incluir nas 8 primeiras posies do campo livre.
Private Sub Command1_Click() ' codigo do evento click do boto de comando PrintRoutine pic_codbar End Sub
Private Sub PrintRoutine(objPrint As Object) ' rotina que gera e visualiza o codigo de barras objPrint.Cls objPrint.FontName = Text1.Text ' nome da fonte usada objPrint.FontSize = 36 ' tamanho da fonte usada objPrint.CurrentX = 1.3 ' posiciona objPrint.CurrentY = 0.3 objPrint.Print Text2.Text ' imprime no picturebox codigo gerado Command1.Enabled = False End Sub Private Sub Text2_Change() ' habilita o boto de comando Command1.Enabled = True End Sub O resultado aps a execuo do projeto :
Gostou ??? Calma tem mais... Veremos outro projeto interessante onde o cdigo gerado via cdigo. Vamos l: Inicie um novo projeto no VB e no formulrio padro insira os seguintes controles: um textbox , um picturebox , trs botes de opo , e dois botes de comando. Desenhe os controles no formulrio como na figura abaixo:
Private Sub cmdExit_Click() ' codigo do boto Sair End End Sub
Private Sub cmdPrint_Click() 'codigo do boto imprimir Printer.PaintPicture Picture1, 5000, 5000 Printer.EndDoc End Sub Private Sub Form_Activate() ' cdigo do evento activate do formulrio optSize(1) = 1 End Sub
Private Sub optSize_Click(Index As Integer) ' codigo dos botes de opes Picture1.ScaleMode = 3 Select Case Index Case 0 Picture1.Height = Picture1.Height * (1.4 * 40 / Picture1.ScaleHeight) Picture1.FontSize = 8 Case 1 Picture1.Height = Picture1.Height * (2.4 * 40 / Picture1.ScaleHeight) Picture1.FontSize = 10 Case 2 Picture1.Height = Picture1.Height * (3 * 40 / Picture1.ScaleHeight) Picture1.FontSize = 14 End Select Call Text1_Change
End Sub Private Sub Text1_Change() 'codigo do evento change da caixa de texto Call DrawBarcode(Text1, Picture1) MinWidth = 2 * Text1.Left + Text1.Width pw = 2 * Picture1.Left + Picture1.Width fw = MinWidth If pw > fw Then fw = pw Form1.Width = fw End Sub A funo que gera o cdigo de barras deve ser inserida em um mdulo e dada a seguir: Sub DrawBarcode(ByVal bc_string As String, obj As Control) Dim xpos!, y1!, y2!, dw%, th!, tw, new_string$ 'define os padroes do codigo Dim bc(90) As String bc(1) = "1 1221" bc(2) = "1 1221" bc(48) = "11 221" 'digitos bc(49) = "21 112" bc(50) = "12 112" bc(51) = "22 111" bc(52) = "11 212" bc(53) = "21 211" bc(54) = "12 211" bc(55) = "11 122" bc(56) = "21 121" bc(57) = "12 121" 'letras maiusculas bc(65) = "211 12" 'A bc(66) = "121 12" 'B bc(67) = "221 11" 'C bc(68) = "112 12" 'D bc(69) = "212 11" 'E bc(70) = "122 11" 'F bc(71) = "111 22" 'G bc(72) = "211 21" 'H bc(73) = "121 21" 'I bc(74) = "112 21" 'J bc(75) = "2111 2" 'K bc(76) = "1211 2" 'L bc(77) = "2211 1" 'M bc(78) = "1121 2" 'N bc(79) = "2121 1" 'O
bc(80) bc(81) bc(82) bc(83) bc(84) bc(85) bc(86) bc(87) bc(88) bc(89) bc(90) 'Misc bc(32) bc(35) bc(36) bc(37) bc(43) bc(45) bc(47) bc(46) bc(64) bc(65)
= = = = = = = = = = = = = = = = = = = = =
"1221 1" "1112 2" "2112 1" "1212 1" "1122 1" "2 1112" "1 2112" "2 2111" "1 1212" "2 1211" "1 2211"
'P 'Q 'R 'S 'T 'U 'V 'W 'X 'Y 'Z
"1 2121" 'espaco "" '# "1 1 1 11" '$ "11 1 1 1" '% "1 11 1 1" '+ "1 1122" '"1 1 11 1" '/ "2 1121" '. "" '@ "1 1221" '*
bc_string = UCase(bc_string)
'dimensoes obj.ScaleMode = 3 'pixels obj.Cls obj.Picture = Nothing dw = CInt(obj.ScaleHeight / 40) 'espaco entre as barras If dw < 1 Then dw = 1 'Debug.Print dw th = obj.TextHeight(bc_string) 'altura do texto tw = obj.TextWidth(bc_string) ' largura do texto new_string = Chr$(1) & bc_string & Chr$(2) y1 = obj.ScaleTop y2 = obj.ScaleTop + obj.ScaleHeight - 1.5 * th obj.Width = 1.1 * Len(new_string) * (15 * dw) * obj.Width / obj.ScaleWidth
'desenha cada caractere na string do codigo de barras xpos = obj.ScaleLeft For n = 1 To Len(new_string) c = Asc(Mid$(new_string, n, 1)) If c > 90 Then c = 0 bc_pattern$ = bc(c)
'desenha cada barra For i = 1 To Len(bc_pattern$) Select Case Mid$(bc_pattern$, i, 1) Case " " 'espaco obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &HFFFFFF, BF xpos = xpos + dw Case "1" 'espaco obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &HFFFFFF, BF xpos = xpos + dw ' linha obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &H0&, BF xpos = xpos + dw Case "2" 'espaco obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &HFFFFFF, BF xpos = xpos + dw 'linha larga obj.Line (xpos, y1)-(xpos + 2 * dw, y2), &H0&, BF xpos = xpos + 2 * dw End Select Next Next '1 mais espaco obj.Line (xpos, y1)-(xpos + 1 * dw, y2), &HFFFFFF, BF xpos = xpos + dw 'tamanho final e texto obj.Width = (xpos + dw) * obj.Width / obj.ScaleWidth obj.CurrentX = (obj.ScaleWidth - tw) / 2 obj.CurrentY = y2 + 0.25 * th obj.Print bc_string 'copia para o clipboard obj.Picture = obj.Image Clipboard.Clear Clipboard.SetData obj.Image, 2 End Sub Ao digitar o nmero para gerar o cdigo de barras temos:
Curiosidades :
Se tiver tempo e pacincia d uma espiada nos links abaixo : http://www.milk.com/barcode/ - calcula o digito de controle de cdigo de barras