EU VAT Number Validator (format & checksum)
Check an EU VAT number's structure for all 27 member states, and its checksum where a public algorithm exists. Everything runs in your browser — nothing is sent or stored. Format/checksum only — this does not confirm the VAT number is active; only the official VIES service does that.
What this validator checks — and what it does not
A VAT (Value Added Tax) identification number has two things a computer can check offline. First, its structure: every EU country fixes a two-letter prefix, a length, and a pattern of digits and letters. Second, for some countries, a check digit computed from the other characters with a published formula. When both pass, the number is well-formed — free of typos, the right length, and internally consistent.
What an offline check can never tell you is whether the number is currently active and registered to a trading business. A perfectly well-formed VAT number can belong to a company that was deregistered years ago, or may never have been issued at all. Confirming that a VAT number is live is the job of the European Commission's VIES (VAT Information Exchange System), which queries each member state's own tax register in real time. Use this validator to catch mistakes before you call VIES — not as a replacement for it. This matters for compliance: a zero-rated cross-border B2B invoice is only defensible if the customer's VAT number was valid and active in VIES on the day you issued it.
How VAT number validation works
The tool first isolates the two-letter prefix, looks up the country, and tests the remaining characters against that country's pattern. If the shape is wrong — too short, too long, letters where digits belong — it stops there, because no checksum can rescue a mis-typed number.
If the shape is valid and the country publishes a check-digit algorithm, the tool runs it. These are all small, standard, verifiable calculations:
- Italy (IT) — 11 digits validated with the Luhn algorithm (mod 10): odd-position digits are added as-is, even-position digits are doubled (subtracting 9 when the result exceeds 9), and the last digit makes the total a multiple of 10.
- Germany (DE) — 9 digits validated with the ISO 7064 MOD 11,10 chain used for the USt-IdNr.
- France (FR) — the 2-character key precedes a 9-digit SIREN. When the key is numeric it must equal
(12 + 3 × (SIREN mod 97)) mod 97. - Belgium (BE) — 10 digits where the last two are a mod 97 control: they must equal
97 − (first 8 digits mod 97). - Luxembourg (LU) — 8 digits where the last two equal
first 6 digits mod 89. - Portugal (PT) — 9 digits validated with the weighted mod 11 scheme (weights 9…2) used for the NIF.
For every other member state the tool validates the format only and says so plainly in the result. Those countries either do not publish a public checksum or use a scheme we do not implement here — so a "format looks correct" result for them is a weaker signal than a full "format and checksum valid".
VAT number format by country
Enter the number exactly as printed, including the prefix. A very common mistake is Greece: its VAT prefix is EL, not GR (this tool accepts both). The suffix "N" below means a digit, "L" means a letter.
| Country | Pattern (after prefix) | Checksum |
|---|---|---|
| Austria (AT) | U + 8 digits | format only |
| Belgium (BE) | 10 digits | mod 97 |
| Bulgaria (BG) | 9 or 10 digits | format only |
| Croatia (HR) | 11 digits | format only |
| Cyprus (CY) | 8 digits + 1 letter | format only |
| Czechia (CZ) | 8, 9 or 10 digits | format only |
| Denmark (DK) | 8 digits | format only |
| Estonia (EE) | 9 digits | format only |
| Finland (FI) | 8 digits | format only |
| France (FR) | 2 key chars + 9 digits | key mod 97 (numeric) |
| Germany (DE) | 9 digits | MOD 11,10 |
| Greece (EL) | 9 digits | format only |
| Hungary (HU) | 8 digits | format only |
| Ireland (IE) | 7 digits + 1–2 letters | format only |
| Italy (IT) | 11 digits | Luhn (mod 10) |
| Latvia (LV) | 11 digits | format only |
| Lithuania (LT) | 9 or 12 digits | format only |
| Luxembourg (LU) | 8 digits | mod 89 |
| Malta (MT) | 8 digits | format only |
| Netherlands (NL) | 9 digits + B + 2 digits | format only |
| Poland (PL) | 10 digits | format only |
| Portugal (PT) | 9 digits | mod 11 |
| Romania (RO) | 2–10 digits | format only |
| Slovakia (SK) | 10 digits | format only |
| Slovenia (SI) | 8 digits | format only |
| Spain (ES) | 9 chars (digit/letter mix) | format only |
| Sweden (SE) | 12 digits | format only |
FAQ
Does a valid result mean the VAT number is active?
No. This tool checks format and, where a public algorithm exists, the checksum only — it does not confirm the VAT number is active or registered to a specific company. Only the official EU VIES service can confirm that.
Why do some countries get only a format check?
Several member states publish the exact check-digit algorithm for their VAT numbers (Italy, Germany, France, Belgium, Luxembourg and Portugal here), so those can be verified mathematically. Others do not publish a public checksum, so we validate the country structure and length only and say so in the result.
Should I include the two-letter country prefix?
Yes. Enter the full VAT number including the country prefix, for example IT00743110157 or DE136695976. Note that Greece uses the prefix EL, not GR.
Validating VAT numbers at scale?
Wiring format and checksum checks into checkout, onboarding or an ERP import? Our pay-per-use API returns the same deterministic result as a clean JSON response — first 25 calls per month free, no key to babysit.
Embed this tool on your site — free
Run a blog, accounting community or internal wiki? Add the VAT validator to any page by pasting this snippet (please keep the credit link):
Click the code to select it, then copy. Works on WordPress, Shopify pages, Notion (via embed), and any HTML page.
Format and checksum validation only, using public standard algorithms. This tool does not confirm that a VAT number is active or registered — only the official EU VIES service does that.