Validador de VAT (EU) por País
Valida o formato de números VAT da União Europeia conforme regras de cada país (DE, FR, IT, ES, PT, NL, BE, AT etc.).
Validação de VAT da UE: formatos por país e o sistema VIES
O número VAT (Value Added Tax — equivalente europeu ao IVA) é o identificador fiscal que toda empresa registrada para IVA na União Europeia carrega em notas fiscais, declarações aduaneiras e registros de fornecimento intracomunitário. Validar um VAT não é um algoritmo único — cada um dos 27 Estados-membros publica seu próprio comprimento, alfabeto e regra de dígito verificador, e um validador robusto precisa primeiro separar o prefixo de país (duas letras ISO-3166) do corpo e então despachar para a rotina correta. Esta página roda tudo no navegador, sem chamadas para o VIES.
A base legal é a Diretiva 2006/112/CE do Conselho e o portal VIES (VAT Information Exchange System) operado pela DG TAXUD. O VIES é a única fonte oficial para confirmar se um número está ativo hoje — a validação sintática local (o que esta ferramenta faz) é necessária mas não suficiente antes de emitir nota intracomunitária com isenção.
Resumo dos formatos por país
- DE Alemanha:
DE+ 9 dígitos, dígito por mod 11 (ex.:DE123456789). - FR França:
FR+ chave alfanumérica de 2 + 9 dígitos SIREN (FR12345678901); chave derivada do SIREN mod 97. - IT Itália:
IT+ 11 dígitos, dígito estilo Luhn (IT12345678901). - ES Espanha (NIF-IVA):
ES+ 9 caracteres, uma letra + 7 dígitos + uma letra, ou variantes DNI/NIE. - NL Holanda:
NL+ 9 dígitos +B+ sufixo de 2 dígitos (NL123456789B01) — o esquema pós-2020 é randomizado. - PT Portugal:
PT+ 9 dígitos — coincide com o NIF pessoal/empresarial. - IE Irlanda: 8 ou 9 caracteres, pode conter
+,*ou duas letras em padrões legados. - PL Polônia:
PL+ 10 dígitos, mod 11 ponderado. - BE Bélgica:
BE+ 10 dígitos começando em 0 ou 1, mod 97. - GB Reino Unido: pós-Brexit, não é mais VAT da UE — exceto Irlanda do Norte, que usa o prefixo
XIe segue no VIES.
Algoritmos de dígito verificador
A maioria dos países da UE adota variações de mod 11 ou mod 97 para o DV. A Itália usa o mesmo "Luhn" (dobrar e somar) dos cartões de crédito. A Espanha mistura letras no corpo, então sua rotina é mais parecida com um hash do que com aritmética. A Alemanha pondera as posições 2,4,8,5,10,9,7,3,6 numa cascata multiplicativa, enquanto a Bélgica calcula 97 - (corpo mod 97) nos primeiros oito dígitos. Um validador genérico precisa, portanto, de uma tabela de dispatch indexada pelo código de país.
// Pseudocódigo: dispatch pelo código ISO do país
function validarVAT(raw) {
const cc = raw.slice(0, 2).toUpperCase()
const corpo = raw.slice(2).replace(/[\s.-]/g, '')
const regra = REGRAS_VAT[cc] // regex + fn de DV por país
if (!regra) return { ok: false, motivo: 'país desconhecido' }
if (!regra.regex.test(corpo)) return { ok: false, motivo: 'formato inválido' }
return { ok: regra.check(corpo), pais: cc }
}
VIES, OSS e fornecimento intracomunitário
Um vendedor brasileiro exportando via Mercado Livre EU, Magazine Luiza Marketplace B2B ou contrato direto B2B precisa colocar o VAT do cliente na nota para que valha o regime de reverse-charge — o IVA passa a ser obrigação do comprador, não do vendedor. Emitir nota com isenção contra um VAT fictício é o sinal clássico de carousel fraud, então a Comissão Europeia exige consulta em tempo real ao VIES antes do embarque. O endpoint SOAP gratuito (ec.europa.eu/taxation_customs/vies/services/checkVatService) tem rate limit mas não exige autenticação; stacks de produção costumam cachear a resposta por (país, número) por 24 horas.
Para serviços digitais a consumidores da UE, o regime OSS (One-Stop Shop) — que substituiu o antigo MOSS (Mini One-Stop Shop) em julho/2021 — permite com um único registro de IVA coletar imposto para os 27 Estados-membros. Vendedores não-UE (incluindo SaaS brasileiros) podem se registrar no non-Union OSS.
LGPD/GDPR, GB pós-Brexit e ferramentas
Números de VAT identificam pessoa jurídica e, quando o registrante é MEI/autônomo, se qualificam como dado pessoal sob GDPR Art. 4(1) e, no Brasil, sob a LGPD. Logs com VAT pedem o mesmo controle de retenção que CPF ou e-mail. Após o Brexit, números com prefixo GB deixaram o VIES em 1º de janeiro de 2021; só sobrou XI (Irlanda do Norte). O número GB antigo ainda é validável sintaticamente — seu corpo de 9 dígitos usa o mod 97 histórico — mas a consulta ao VIES retorna "serviço indisponível para este Estado-membro".
- Bibliotecas:
node-vatejsvatem JavaScript,python-stdnumem Python,valvatem Ruby — todas embarcam o dispatch por país. - Portal OSS da UE:
oss.europa.eupara registro e declarações trimestrais. - CFE Tax Advisers Europe: entidade independente que acompanha a implementação do IVA por país.
FAQ
O VIES é gratuito? Sim. Os endpoints SOAP e REST não têm tarifa, só rate limit. Aplicações em produção devem cachear e fazer backoff em HTTP 429.
O que aconteceu com GB pós-Brexit? O Reino Unido (prefixo GB) saiu do VIES em 1º de janeiro de 2021. A Irlanda do Norte permaneceu via o prefixo dedicado XI.
Um DV válido prova que a empresa existe? Não. A validação sintática só pega erros de digitação. O VIES prova que o número está registrado hoje, e ainda assim não certifica o nome fantasia da nota.
Como evitar carousel fraud? Cruze o VAT com o VIES em cada embarque, guarde a resposta SOAP como evidência e fique atento a notas com rotação frequente de número vindas do mesmo endereço.
SaaS brasileiro pode usar OSS? Pode — basta registrar no esquema non-Union OSS em qualquer Estado-membro (Irlanda e Malta são populares) e recolher o IVA do país do consumidor em uma única declaração trimestral.
Ferramentas Relacionadas
VAT Italiano
Valide o formato de um número de VAT italiano (Partita IVA: IT + 11 dígitos). Confira o registro fiscal de empresas da Itália antes de faturar ou negociar.
Validador de Celular por País
Valida número de celular para o país escolhido (BR, EUA, PT, ES, AR, MX). Formato: country code + número, com regras específicas por país.
Validador de Código ISO 3166 (País)
Valida códigos de país no formato ISO 3166-1 alpha-2 (BR, US, FR) e alpha-3 (BRA, USA, FRA), retornando o nome do país.