Tax Identification Numbers (TINs) are a cornerstone of DAC8 reporting. Every Reportable User should, in principle, have a valid TIN for each jurisdiction in which they are tax resident. Collecting and validating TINs correctly is one of the more technically challenging aspects of DAC8 compliance, as TIN formats and issuance practices differ significantly across countries. This guide covers practical approaches to TIN collection, validation, and handling edge cases.
> Disclaimer: TIN formats and issuance rules change over time and vary significantly by country. The information in this guide is based on publicly available sources and general best practices. Always verify TIN format rules against the most current information from each country's tax authority. Check with your national tax authority for specific DAC8 TIN requirements.
What Is a TIN?
A Tax Identification Number is a unique identifier assigned to individuals and entities by a tax authority for the purpose of tax administration. Different countries use different names and formats for TINs:
| Country | TIN Name(s) | Typical Format |
|---|---|---|
| Germany | Steuerliche Identifikationsnummer (IdNr) | 11 digits |
| France | Numero fiscal de reference (NIF) | 13 digits |
| Netherlands | Burgerservicenummer (BSN) | 9 digits |
| Spain | NIF/NIE | Letter + 7 digits + letter, or X/Y/Z + 7 digits + letter |
| Italy | Codice Fiscale | 16 alphanumeric characters |
| Ireland | PPS Number | 7 digits + 1-2 letters |
| Belgium | Rijksregisternummer / Numero national | 11 digits (format: YY.MM.DD-XXX.CC) |
| Austria | Steuernummer | 9 digits (format: XX-XXX/XXXX) |
| Portugal | NIF | 9 digits |
| Sweden | Personnummer | 10 or 12 digits (YYMMDD-XXXX or YYYYMMDD-XXXX) |
| Poland | PESEL / NIP | PESEL: 11 digits; NIP: 10 digits |
| United States | SSN / ITIN / EIN | SSN: XXX-XX-XXXX; ITIN: 9XX-XX-XXXX; EIN: XX-XXXXXXX |
| United Kingdom | UTR / NINO | UTR: 10 digits; NINO: 2 letters + 6 digits + 1 letter |
This is not exhaustive. The OECD maintains a reference of TIN formats by country that may be a useful starting point.
Collecting TINs from Users
When to Collect
TINs should ideally be collected during the self-certification process at onboarding. Best practices include:
- At account registration or KYC: Present the TIN field alongside other identity verification fields
- During self-certification: Require TIN entry as part of the tax residency declaration
- Before first reportable transaction: If not collected during onboarding, require TIN before the user can execute a transaction that would be reportable under DAC8
- During remediation: For existing users who registered before DAC8-compliant onboarding was in place
How to Collect
- Label clearly: Use the country-specific name for the TIN where possible (e.g., show "Codice Fiscale" for users who declare Italy as their tax residency)
- Provide examples: Show a sample format for the selected country (e.g., "Format: XXXXXX00X00X000X" for Italy's Codice Fiscale)
- One TIN per jurisdiction: If a user declares multiple tax residencies, collect a separate TIN for each
- Handle "no TIN" cases: Provide a mechanism for users to indicate they do not have a TIN, with a required explanation (see "Fallback Procedures" below)
User Interface Recommendations
- Use a country selector that, when changed, dynamically updates the TIN field label, placeholder text, and validation rules
- Provide a help link or tooltip that explains where the user can find their TIN (e.g., "Your IdNr can be found on your tax assessment notice or the letter from the Bundeszentralamt fur Steuern")
- Allow both formatted and unformatted input (e.g., accept "12 345 678 901" and "12345678901" for a German IdNr)
- Strip non-essential characters (spaces, hyphens, dots) before validation and storage
Validation Algorithms by Country
TIN validation ranges from simple format checks to complex algorithmic validation with check digits. Here is a tiered approach:
Tier 1: Basic Format Validation
At minimum, validate that the TIN matches the expected length and character pattern for the declared country. This catches obvious errors like:
- Wrong number of digits
- Letters where only numbers are expected (or vice versa)
- Clearly invalid entries (e.g., all zeros, sequential digits)
Example regex patterns (simplified, for illustration):
- Germany (IdNr):
^\d{11}$ - France (NIF):
^\d{13}$ - Netherlands (BSN):
^\d{9}$ - Portugal (NIF):
^\d{9}$ - Ireland (PPS):
^\d{7}[A-Z]{1,2}$
Tier 2: Check Digit Validation
Many countries include a check digit in their TIN that can be used to verify validity. Implementing check digit validation significantly reduces the number of invalid TINs in your database.
Germany (IdNr) - Check Digit Algorithm: The 11th digit of the German IdNr is a check digit calculated using a modified ISO 7064 algorithm. The algorithm involves iterating through the first 10 digits, maintaining a running sum and product, and comparing the result against the 11th digit.
Netherlands (BSN) - "11-proof" Check: The Dutch BSN uses a weighted sum check. Multiply each digit by a descending weight (9, 8, 7, ..., 2, -1 for the last digit), sum the results, and verify that the total is divisible by 11.
Italy (Codice Fiscale) - Complex Alphanumeric Check: The Italian Codice Fiscale uses a complex algorithm that incorporates the person's name, date of birth, and place of birth. Full validation requires reference data (municipality codes), but you can at minimum validate the structure: 6 letters + 2 digits + 1 letter + 2 digits + 1 letter + 3 digits + 1 letter (check character).
Spain (NIF) - Letter Check: For standard NIFs (digit + 7 digits + letter), the check letter is calculated by dividing the numeric portion by 23 and looking up the remainder in a predefined letter table.
Tier 3: Cross-Reference Validation
Some jurisdictions may provide TIN verification services that allow you to check a TIN against the tax authority's database. The EU's TIN validation tool (available through the European Commission's website) may support validation for certain Member States. Where available, consider integrating this as an additional validation layer.
Note: Cross-reference validation services may not be available for all countries, and their availability and terms of use may change. Do not rely solely on these services.
Handling Invalid TINs
When a TIN fails validation, your system should:
- Inform the user immediately: Display a clear error message indicating that the TIN does not appear to be valid for the selected country
- Suggest common corrections: For example, "Please check that you have entered all 11 digits of your German IdNr" or "The check digit does not match. Please verify your TIN and try again"
- Allow retry: Give the user the opportunity to correct and resubmit
- Log the attempt: Record failed validation attempts for compliance monitoring
- Escalate if persistent: If a user repeatedly enters an invalid TIN, flag the account for manual review by your compliance team
Soft vs. Hard Validation
Consider implementing two levels of validation:
- Hard validation (blocking): The TIN must pass at least basic format validation before the form can be submitted. This prevents clearly invalid entries.
- Soft validation (warning): If the TIN passes format validation but fails a check digit or reasonableness check, warn the user but still allow submission. Flag the record for follow-up review.
This approach balances data quality with user experience, particularly for jurisdictions where your validation rules may not be fully up to date.
Fallback Procedures When TIN Is Unavailable
Not all users will be able to provide a TIN. Valid reasons for TIN unavailability may include:
Reason 1: Jurisdiction Does Not Issue TINs
A small number of jurisdictions do not issue TINs to all residents. In these cases:
- Accept a declaration that no TIN is issued by the jurisdiction
- Record the reason code (e.g., "Jurisdiction does not issue TINs")
- This should be a valid exception in your DAC8 report
Reason 2: TIN Not Yet Issued
A user may have recently become tax resident in a jurisdiction and not yet received their TIN. In these cases:
- Accept a temporary declaration that the TIN is pending
- Set a follow-up reminder (e.g., 90 days) to request the TIN again
- If the TIN is still unavailable at reporting time, include the appropriate reason code in your report
Reason 3: User Refuses to Provide TIN
If a user refuses to provide a TIN without a valid reason:
- Document the refusal
- Consider whether this affects your ability to comply with DAC8
- Evaluate whether to restrict the user's account in accordance with your terms of service
- Include the user in your report with an appropriate indicator that the TIN was not obtained
Reason Codes
Your reporting system should support reason codes for TIN unavailability. The exact codes may be defined by the DAC8 XML schema or your national tax authority. Common categories include:
- TIN not issued by the jurisdiction
- TIN not required by the jurisdiction
- TIN pending issuance
- TIN not obtained despite reasonable efforts
Storage and Security
TINs are sensitive personal data and should be treated accordingly:
- Encrypt TINs at rest in your database
- Limit access to TIN data to authorized personnel only
- Mask TINs in user interfaces where full display is not necessary (e.g., show only the last 4 characters)
- Audit access to TIN data and maintain logs
- Comply with GDPR data minimization and purpose limitation principles
- Retain TINs for the period required by DAC8 and national legislation, and no longer
TIN Validation Checklist
- [ ] TIN collection integrated into onboarding and self-certification flow
- [ ] Dynamic field labels and format hints based on selected country
- [ ] Basic format validation (regex) implemented for all EU Member States
- [ ] Check digit validation implemented for major jurisdictions (at minimum: Germany, Netherlands, Spain, Italy)
- [ ] "No TIN" option available with mandatory reason code
- [ ] Invalid TIN error messages are clear and actionable
- [ ] TIN changes tracked with effective dates and audit trail
- [ ] TINs encrypted at rest in the database
- [ ] Access to TIN data restricted and audited
- [ ] Periodic re-validation process in place for stored TINs
- [ ] Fallback procedures documented for each TIN unavailability scenario
Summary
TIN collection and validation is a technically detailed but essential part of DAC8 compliance. Start with basic format validation for all jurisdictions, then progressively add check digit validation for high-priority countries. Always provide a clear fallback process for users who cannot supply a TIN, and document the reason. Store TINs securely, validate them regularly, and keep your format rules up to date as countries update their TIN systems.
This article is for informational purposes only and does not constitute legal or tax advice. TIN formats and rules change frequently. Verify current formats against official sources from each country's tax authority.
Need help with DAC8 reporting?
Our team handles XML generation, TIN validation, and submission for CASPs across all 27 EU Member States.