Browse all tools

Check the format before you check the registration.

Validate a VAT number's structure and check digit in the browser, and read the exact pattern, example, checksum rule and official source for every supported jurisdiction.

Reviewed formats

Every VAT format reviewed by VAT.tools. "Format only" means no public check digit is implemented, so only the structure can be checked.
JurisdictionPrefixPatternExampleCheck digitSource
AustriaAT^ATU\d{8}$ATU12345675Format onlyEuropean Commission — VAT identification numbers
BelgiumBE^BE[01]\d{9}$BE0123456748The first eight digits modulo 97 must equal the final two digits.European Commission — VAT identification numbers
BulgariaBG^BG\d{9,10}$BG123456789Format onlyEuropean Commission — VAT identification numbers
CroatiaHR^HR\d{11}$HR12345678901Format onlyEuropean Commission — VAT identification numbers
CyprusCY^CY\d{8}[A-Z]$CY12345678XFormat onlyEuropean Commission — VAT identification numbers
CzechiaCZ^CZ\d{8,10}$CZ12345678Format onlyEuropean Commission — VAT identification numbers
DenmarkDK^DK\d{8}$DK12345678Format onlyEuropean Commission — VAT identification numbers
EstoniaEE^EE\d{9}$EE123456789Format onlyEuropean Commission — VAT identification numbers
FinlandFI^FI\d{8}$FI01120389Weights 7, 9, 10, 5, 8, 4, 2 over the first seven digits; remainder 1 is invalid.European Commission — VAT identification numbers
FranceFR^FR[0-9A-Z]{2}\d{9}$FR40303265045The two-character key equals (12 + 3 × (SIREN mod 97)) mod 97 for numeric keys.European Commission — VAT identification numbers
GermanyDE^DE\d{9}$DE123456788ISO 7064 MOD 11,10 over the first eight digits.European Commission — VAT identification numbers
GreeceEL^EL\d{9}$EL123456789Format onlyEuropean Commission — VAT identification numbers
HungaryHU^HU\d{8}$HU12345678Format onlyEuropean Commission — VAT identification numbers
IrelandIE^IE(\d{7}[A-Z]{1,2}|\d[A-Z]\d{5}[A-Z])$IE1234567AFormat onlyEuropean Commission — VAT identification numbers
ItalyIT^IT\d{11}$IT00743110157Luhn checksum over all eleven digits.European Commission — VAT identification numbers
LatviaLV^LV\d{11}$LV12345678901Format onlyEuropean Commission — VAT identification numbers
LithuaniaLT^LT(\d{9}|\d{12})$LT123456789Format onlyEuropean Commission — VAT identification numbers
LuxembourgLU^LU\d{8}$LU26375245The first six digits modulo 89 must equal the final two digits.European Commission — VAT identification numbers
MaltaMT^MT\d{8}$MT12345678Format onlyEuropean Commission — VAT identification numbers
NetherlandsNL^NL\d{9}B\d{2}$NL111222333B01Eleven-test with weights 9 to 2 and minus one on the final digit.European Commission — VAT identification numbers
PolandPL^PL\d{10}$PL5261040828Weights 6, 5, 7, 2, 3, 4, 5, 6, 7 over the first nine digits; remainder 10 is invalid.European Commission — VAT identification numbers
PortugalPT^PT\d{9}$PT123456789Weights 9 to 2 over the first eight digits; remainder below 2 maps to 0.European Commission — VAT identification numbers
RomaniaRO^RO\d{2,10}$RO123456789Format onlyEuropean Commission — VAT identification numbers
SlovakiaSK^SK\d{10}$SK1234567890Format onlyEuropean Commission — VAT identification numbers
SloveniaSI^SI\d{8}$SI12345678Format onlyEuropean Commission — VAT identification numbers
SpainES^ES[0-9A-Z]\d{7}[0-9A-Z]$ES12345678ZDNI/NIE letter table or the CIF control digit and letter mapping.European Commission — VAT identification numbers
SwedenSE^SE\d{12}$SE556016068001Luhn checksum over the first ten digits of the organisation number.European Commission — VAT identification numbers
Northern IrelandXI^XI(\d{9}|\d{12})$XI123456789Format onlyEuropean Commission — VIES
United KingdomGB^GB(\d{9}|\d{12}|GD\d{3}|HA\d{3})$GB123456789Format onlyHM Revenue & Customs — check a VAT number
NorwayNO^NO\d{9}MVA$NO123456789MVAFormat onlyBrønnøysundregistrene — Enhetsregisteret
SwitzerlandCH^CHCHE\d{9}(MWST|TVA|IVA)$CHCHE123456789MWSTFormat onlyFederal Tax Administration — UID register

Developer reference

The pattern applied to the selected jurisdiction, with a minimal example in JavaScript and Python. The browser validator uses the same expression.

Regular expression

^DE\d{9}$

JavaScript

const pattern = new RegExp("^DE\\d{9}$");
pattern.test("DE123456788");

Python

import re
pattern = re.compile(r"^DE\d{9}$")
bool(pattern.match("DE123456788"))

Questions

Does a matching format mean the VAT number is active?

No. A format match describes the shape of the identifier, and a matching check digit only means the digits are internally consistent. Neither establishes that a VAT registration exists. Use the live lookup for that.

Why would a check digit fail?

The most common cause is a mistyped or transposed digit. A failed check digit means the number is very likely wrong, not that the business is unregistered.

Is my number sent anywhere?

No. The validation runs entirely in your browser and nothing is submitted or stored. The page is a static form with local pattern and checksum logic.

Orientation only. A format or check digit result is not a registration confirmation, and it is not tax advice. The linked authority publication is authoritative, and only the live service reflects current registration status.

Need this for every customer record?

VAT.tools saves source-linked evidence for each check, with an API, MCP server and bulk workflows for repeat work.