Belgian VAT Number Validation
Format, pattern, and checksum algorithm for BE VAT numbers
Belgian VAT numbers (BTW-nummer / Numéro de TVA) consist of 10 digits and use a simple MOD 97 checksum algorithm for validation. The BE number format has changed several times over the years, which means input can arrive in a few different shapes. This guide walks through the format, the changes, and how to normalize and validate each variant.
Format vs. Active Validation
This checks format only, not if a VAT number is really registered. Use VatDB's API to verify if a number is really registered and active. VatDB checks official EU and national datasources.
Format Overview
| Property | Value |
|---|---|
| Country Code | BE |
| Canonical format | 10 digits starting with 0 or 1 |
| Length | 9 or 10 digits (11 or 12 characters with BE country prefix) |
| Examples | BE0417497106 BE0403091220 BE1003666423 |
| Comment | The 10-digit format has allowed 0 or 1 as the first digit since it was defined in 2003. The 1 range was held in reserve and only activated on 19 September 2023, when the first 1-prefix number was issued because the 0 range was nearing exhaustion. Both prefixes are valid and in circulation. |
Regex Pattern
Allows optional dot grouping (0xxx.xxx.xxx / 1xxx.xxx.xxx / xxx.xxx.xxx):
^BE[0-9]{3,4}(\.?[0-9]{3}){2}$
Or without country prefix:
^[0-9]{3,4}(\.?[0-9]{3}){2}$
Strict (digits only, no dots):
^BE[0-9]{9,10}$
Checksum Algorithm
Belgian VAT numbers use MOD 97 validation:
def validate_be_vat(number):
# Remove BE prefix if present
if number.startswith('BE'):
number = number[2:]
# Strip dot grouping (e.g. "0314.595.348" -> "0314595348")
number = number.replace('.', '')
if len(number) not in (9, 10) or not number.isdigit():
return False
# Legacy shorthand may omit the leading zero.
if len(number) == 9:
number = "0" + number
if number[0] not in ('0', '1'):
return False
# MOD 97 check
base = int(number[:8])
check = int(number[8:])
return (base + check) % 97 == 0
The last 2 digits are the check digits, calculated as 97 - (first_8_digits % 97).
9 digit vs 10 digit format
- Canonical Belgian VAT numbers are 10 digits (
0or1first digit). - Numbers starting with 0 are the original series.
- Numbers starting with 1 were introduced on 19 September 2023, when the
1-range (reserved in the 2003 format spec) was activated as the0-range neared exhaustion. - Legacy shorthand input with 9 digits can be normalized by adding a leading zero. For example,
BE111222333(9 digits) becomesBE0111222333(leading0+ original 9 digits). - Always normalize 9-digit input to the 10-digit form before running the checksum or sending to VatDB.
Important Notes
- Official publications often display grouped notation (
0xxx.xxx.xxx/1xxx.xxx.xxx). This grouping and the dot separators are optional and for readability. - Example enterprise numbers published by Belgian authorities include:
0314.595.348,0553.523.471,0727.720.427,1006.872.569
Frequently Asked Questions
How do I check if a Belgian VAT number is valid?
Normalize the input first (if 9 digits, add leading zero), verify the canonical 10-digit form starts with 0 or 1, then apply the MOD 97 checksum: (first 8 digits + last 2 digits) must be divisible by 97. Note that these checks only verify the checksum. They do not tell you whether the number is actually registered and active. For that, use VatDB, which queries official EU and national databases in real time.
What's the difference between format validation and checking if a VAT number is active?
Checksum validation catches typos and formatting errors, but a correctly formatted number might be fictional or belong to a closed business. VatDB's API confirms real registration status.
What format does a Belgian VAT number have?
The country code BE followed by 10 digits, where the first digit is 0 or 1 (e.g. BE0314595348, BE1006872569). Official publications often display the digits as 0xxx.xxx.xxx; the dots are optional and purely for readability.
How many digits are in a Belgian VAT number?
Canonical Belgian VAT numbers contain exactly 10 digits after BE. Some legacy shorthand input appears as 9 digits and should be normalized by adding a leading zero.
Why does my Belgian VAT number start with BE0 or BE1?
The 10-digit format has allowed 0 or 1 as the first digit since 2003, but for two decades only the 0-range was issued. On 19 September 2023, the 1-range was activated because the 0-range was nearing exhaustion. BE0 numbers are existing registrations; BE1 numbers are newer ones.
How do I verify a Belgian company's VAT number?
VatDB's API validates VAT numbers against official EU and national databases in real-time. Includes company information with each verification.
What are some real Belgian (BE) VAT numbers I can test with?
These Belgian (BE) VAT numbers are real and currently registered: BE0417497106, BE0403091220, BE1003666423.
Validate Belgian VAT Numbers Instantly
Use our API for real-time BE VAT number validation with MOD 97 checksum verification
Try Free