Last updated
What Is a VAT Number?
A VAT number is a unique identifier assigned to businesses registered for Value Added Tax. In the EU, valid VAT numbers are required on B2B invoices to qualify for VAT exemption. The VAT Number Validator checks format, check digits, and country-specific rules for EU countries, the UK, Norway, and Switzerland.
EU VAT Number Formats by Country
Country Code Format Example
----------- ---- ------ -------
Austria AT ATU + 8 digits ATU12345678
Belgium BE BE + 10 digits BE0123456789
Bulgaria BG BG + 9-10 digits BG123456789
Croatia HR HR + 11 digits HR12345678901
Cyprus CY CY + 8 digits + L CY12345678L
Czech Republic CZ CZ + 8-10 digits CZ12345678
Denmark DK DK + 8 digits DK12345678
Estonia EE EE + 9 digits EE123456789
Finland FI FI + 8 digits FI12345678
France FR FR + 2 chars + 9 d FR12345678901
Germany DE DE + 9 digits DE123456789
Greece EL EL + 9 digits EL123456789
Hungary HU HU + 8 digits HU12345678
Ireland IE IE + 7 digits + 1-2 IE1234567X
Italy IT IT + 11 digits IT12345678901
Latvia LV LV + 11 digits LV12345678901
Lithuania LT LT + 9 or 12 digits LT123456789
Luxembourg LU LU + 8 digits LU12345678
Malta MT MT + 8 digits MT12345678
Netherlands NL NL + 9 digits + B + 2 NL123456789B01
Poland PL PL + 10 digits PL1234567890
Portugal PT PT + 9 digits PT123456789
Romania RO RO + 2-10 digits RO12345678
Slovakia SK SK + 10 digits SK1234567890
Slovenia SI SI + 8 digits SI12345678
Spain ES ES + letter/digit + 7 + letter/digit ES12345678A
Sweden SE SE + 12 digits SE123456789001
UK (post-Brexit) GB GB + 9 or 12 digits GB123456789
Validating a German VAT Number
Input: DE123456789
Validation steps:
1. Country code: DE (Germany) ✓
2. Length: 11 characters (DE + 9 digits) ✓
3. Format: DE followed by 9 digits ✓
4. Check digit algorithm (Luhn-style):
Digits: 1 2 3 4 5 6 7 8 9
Expected check digit: 9
Actual check digit: 9 ✓
Result: VALID ✓
Country: Germany
Format: DE + 9 digits
Validating a French VAT Number
Input: FR12345678901
Validation steps:
1. Country code: FR (France) ✓
2. Length: 13 characters (FR + 2 + 9) ✓
3. Format: FR + 2 alphanumeric + 9 digits ✓
4. SIREN check: last 9 digits must be valid SIREN number ✓
Result: VALID ✓
Country: France
Key: 12 (first 2 chars after FR)
SIREN: 345678901
Invalid VAT Number Examples
Input: DE12345678
✗ Invalid: Too short. German VAT numbers have 9 digits after DE (got 8).
Input: DE12345678A
✗ Invalid: Invalid character 'A'. German VAT numbers contain only digits.
Input: XX123456789
✗ Invalid: Unknown country code 'XX'. Not a recognized EU VAT prefix.
Input: GB123456789
✓ Valid: UK VAT number (post-Brexit format)
Note: UK is no longer in EU VIES system — verify via HMRC separately.
Input: DE000000000
✗ Invalid: Check digit mismatch. Expected 7, got 0.
Likely a transcription error.
Batch VAT Number Validation
Input (customer database export):
DE123456789
FR12345678901
NL123456789B01
IT12345678901
GB123456789
DE000000000
INVALID_VAT
Results:
DE123456789 ✓ Valid — Germany
FR12345678901 ✓ Valid — France
NL123456789B01 ✓ Valid — Netherlands
IT12345678901 ✓ Valid — Italy
GB123456789 ✓ Valid — United Kingdom
DE000000000 ✗ Invalid — Check digit error
INVALID_VAT ✗ Invalid — Unrecognized format
Summary: 5 valid, 2 invalid
VAT Number Validation in Code
// JavaScript — basic format validation
const vatPatterns = {
DE: /^DE\d{9}$/,
FR: /^FR[A-Z0-9]{2}\d{9}$/,
GB: /^GB(\d{9}|\d{12})$/,
NL: /^NL\d{9}B\d{2}$/,
IT: /^IT\d{11}$/,
};
function validateVATFormat(vatNumber) {
const country = vatNumber.substring(0, 2).toUpperCase();
const pattern = vatPatterns[country];
if (!pattern) {
return { valid: false, error: `Unknown country code: ${country}` };
}
const normalized = vatNumber.replace(/[\s.-]/g, '').toUpperCase();
return {
valid: pattern.test(normalized),
country,
normalized
};
}
validateVATFormat('DE 123 456 789');
// { valid: true, country: 'DE', normalized: 'DE123456789' }
EU VIES Lookup
Beyond format validation, EU VAT numbers can be verified
against the VIES (VAT Information Exchange System) database:
VIES check for DE123456789:
Status: Active ✓
Company name: Example GmbH
Address: Musterstraße 1, 10115 Berlin, Germany
Valid from: 2018-03-15
VIES check for DE999999999:
Status: Not found ✗
This number is not registered in the VIES database.
Note: VIES verification confirms the number is currently active,
not just correctly formatted. Use for B2B invoice zero-rating.
When to Validate VAT Numbers
- B2B checkout — verify before applying VAT exemption
- Invoice generation — ensure VAT number is valid before issuing zero-rated invoice
- Customer onboarding — validate during account registration
- Database audit — periodically check existing customer VAT numbers
- Supplier verification — confirm supplier VAT numbers for accounting
Common Input Variations (All Accepted)
DE123456789 — no spaces (canonical)
DE 123 456 789 — spaces between groups
DE-123-456-789 — hyphens
de123456789 — lowercase (normalized to uppercase)
DE.123.456.789 — dots