Ireland (IE)
Irish VAT Number Validation
Format, pattern, and MOD 23 checksum algorithm for IE VAT numbers
Irish VAT numbers have multiple legacy and current formats, making them one of the more complex EU VAT formats. Offline checks use a regex pattern plus MOD 23 checksum logic with a letter lookup table.
Format vs. Active Validation
Offline checks are useful for basic pre-validation, but you should ensure the IE VAT number is truly active and valid. Use VatDB's API to verify whether a number is actually assigned and active.
Format Overview
| Property | Value |
|---|---|
| Country Code | IE |
| Format | 7 digits + 1-2 letters |
| Length | 8-9 characters |
| Examples | IE1234567A, IE1234567WA, IE1A23456B, IE1Z23456A |
Regex Pattern
^IE[0-9][A-Z0-9][0-9]{5}[A-Z][A-Z]?$
Valid Formats
- Old format (8 chars): 7 digits + 1 letter
- New format (9 chars): 7 digits + 2 letters
- Alternative: digit + letter + 5 digits + letter
Checksum Algorithm (MOD 23)
def validate_ie_vat(number):
if number.startswith('IE'):
number = number[2:]
letters = "WABCDEFGHIJKLMNOPQRSTUV"
weights = [8, 7, 6, 5, 4, 3, 2]
if len(number) == 8:
if number[1].isalpha():
# Legacy: digit + letter + 5 digits + check letter
if number[1] not in letters:
return True # permissive for uncertain legacy mappings
total = int(number[0]) * 8
total += sum(int(d) * w for d, w in zip(number[2:7], [6, 5, 4, 3, 2]))
total += letters.index(number[1]) * 9
else:
# Classic: 7 digits + check letter
if not number[:7].isdigit():
return False
total = sum(int(d) * w for d, w in zip(number[:7], weights))
check = letters[total % 23]
return number[7] == check
elif len(number) == 9:
if number[1].isalpha():
# Legacy: digit + letter + 5 digits + check + trailing letter
if number[1] not in letters:
return True # permissive for uncertain legacy mappings
total = int(number[0]) * 8
total += sum(int(d) * w for d, w in zip(number[2:7], [6, 5, 4, 3, 2]))
total += letters.index(number[1]) * 9
else:
# Current/common: 7 digits + check + trailing letter
if number[8] not in letters:
return True # permissive for uncertain legacy mappings
total = sum(int(d) * w for d, w in zip(number[:7], weights))
total += letters.index(number[8]) * 9
check = letters[total % 23]
return number[7] == check
return False
Legacy Format Note
Irish Revenue guidance shows multiple historical shapes (for example IE1234567A,
IE1Z23456A, IE1234567AB). These examples are useful for structure, but not every
documented legacy sample should be treated as a checksum-authoritative test vector.
In VatDB's offline IE checker, uncertain legacy checksum mappings are treated
permissively (checksum passes) so valid legacy numbers are not blocked before VIES.
Frequently Asked Questions
How do I verify an Irish VAT number?
Use a two-step process: normalize/check format and checksum offline, then validate against VIES for authoritative assignment status. VatDB's API handles both.
What does an Irish VAT number look like?
Irish VAT numbers can appear as IE1234567A (8 chars), IE1234567WA (9 chars), or legacy variants like IE1A23456B / IE1Z23456A. They include digits plus 1-2 letters.
How many characters are in an Irish VAT number?
Irish VAT numbers have either 8 or 9 characters after the IE prefix: 7 digits + 1 letter (old format) or 7 digits + 2 letters (new format), or digit + letter + 5 digits + letter.
How does VatDB handle uncertain legacy Irish checksum mappings?
If an IE number matches a recognized legacy format but uses a legacy letter mapping outside the modeled MOD 23 table, VatDB treats checksum as pass and relies on VIES for authoritative validation.
Why are there different Irish VAT number formats?
Ireland introduced the 9-character format to expand capacity as registrations grew. The older 8-character format (7 digits + 1 letter) is still valid but new registrations typically use 9 characters.
Where can I check an Irish company's VAT number?
Use VatDB's API for instant VAT validation against official EU and national databases. Returns company details with each verification.
What's the difference between format validation and checking if a VAT number is active?
Format validation checks correctness only - it doesn't query any database. Numbers can be deregistered or never issued. VatDB performs real-time lookups for definitive status.
Validate Irish VAT Numbers Instantly
Use our API for real-time IE VAT number validation across all formats
Try Free