Como saber se um código de barras é válido
Confere se um código de barras numérico é válido — EAN-13, EAN-8, UPC e formatos afins — recalculando o dígito verificador e o comprimento. Grátis e direto no navegador, para quem cadastra produtos em marketplace ou no PDV e não pode deixar passar um GTIN digitado errado.
Executar grátis
Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.
O dígito verificador não perdoa
O último número de um EAN-13 não é aleatório: ele resulta de um cálculo sobre os doze anteriores. Troque qualquer dígito e a conta deixa de fechar — é assim que caixas de supermercado e sistemas de estoque flagram leitura errada. Esta ferramenta refaz o cálculo na hora: se o dígito confere, o código é estruturalmente válido; se não confere, alguém digitou errado em algum ponto da cadeia.
GTIN recusado no cadastro do marketplace
Marketplaces como o Mercado Livre exigem GTIN válido para publicar produto — e recusam o cadastro quando o cálculo do dígito não fecha. O erro quase nunca é do fabricante: é o zero comido na digitação, os dígitos trocados de lugar, a célula da planilha que virou notação científica e amputou o número. Conferir a coluna inteira antes de subir o catálogo transforma uma tarde de recusas num único ajuste.
Digitou, escaneou ou importou errado?
Os três caminhos produzem códigos quebrados de formas diferentes. Na digitação, o clássico é inverter vizinhos (…4857… vira …4587…). No escaneamento, leitor desregulado devolve dígito trocado. Na importação de planilha, o vilão é a formatação: código que começa com zero perde o zero, número longo vira “7,89E+12”. A validação pega os três casos — e saber qual deles aconteceu ajuda a corrigir a origem, não só o sintoma.
Catálogos inteiros via API
Para conferências pontuais, o navegador resolve de graça. Para o catálogo inteiro ou uma rotina de importação de fornecedores, a mesma validação roda via API a US$ 0,002 por código — um catálogo de 20.000 itens é conferido por US$ 40. O resultado estruturado indica cada código reprovado e o motivo, pronto para virar relatório de pendência que volta para o fornecedor corrigir na origem.
Casos de uso
Subir catálogo no marketplace
Um lojista de eletrônicos prepara 300 anúncios novos. Antes de importar, valida a coluna de GTIN da planilha e corrige os códigos digitados errado — nenhuma recusa na publicação.
PDV da padaria
A Padaria Pão Dourado Ltda. cadastra os produtos de um fornecedor novo no sistema de caixa. Cada EAN é conferido na hora; código que não fecha volta para o representante antes de travar a fila do caixa.
Recebimento no depósito
Uma distribuidora confere a planilha de códigos enviada pelo fabricante contra o dígito verificador antes de imprimir etiquetas internas — erro descoberto no papel custa menos que na prateleira.
Perguntas frequentes
Quais formatos são validados?
Os códigos numéricos com dígito verificador mais usados no varejo: EAN-13 (o padrão de prateleira no Brasil), EAN-8, UPC-A e formatos afins da família GTIN.
Código válido significa produto registrado na GS1?
Não. A validação confirma que a estrutura e o dígito verificador fecham — ou seja, que o código é matematicamente legítimo. Saber se aquele número foi de fato atribuído a um produto é outra consulta, feita nos canais da própria GS1.
Vocês geram códigos de barras novos?
Esta ferramenta só valida. Gerar código de barras para produto próprio envolve obter uma faixa de numeração junto à GS1 — desconfie de “EAN grátis” para uso comercial, porque marketplace cruza essa informação.
É grátis mesmo?
No navegador, sim: cole quantos códigos quiser, sem cadastro e sem limite do tipo “5 por dia”. O que se paga é a automação via API — US$ 0,002 por código, cobrado por uso.
Meus códigos ficam registrados em algum lugar?
Não: a conferência do dígito verificador acontece no próprio navegador, e a sua lista não é enviada para servidor algum. Catálogo de produto também é informação comercial — tratamos como tal.
E o código de barras de boleto?
O foco desta validação são os códigos de produto (família EAN, UPC e GTIN). A linha digitável de boleto segue um padrão bancário próprio, com outra estrutura de conferência — não use esta ferramenta para decidir se um boleto é confiável.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/verify/barcode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/verify/barcode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/verify/barcode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/verify/barcode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/verify/barcode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"items": [
"valor-1",
"valor-2"
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "verify.barcode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |