Skip to content
Last updated

For transactions in jurisdictions that require a Tax Identification Number (TIN), Banxa validates the submitted value against the format and checksum rules for the user's country. The specific field type collected depends on the country โ€” some countries use a national tax ID, others use a national identity number, and the US uses an SSN.

TIN collection is triggered by eligibility โ€” it is required when a transaction meets the threshold for the Standard or Express tier in a TIN-required jurisdiction (primarily Europe). Partners do not need to determine when to collect it; the eligibility response will include it as a requirement when applicable.


Tax ID type by country

The type value indicates which identifier Banxa collects and validates for each country.

TypeDescription
tax_idGovernment-issued tax identification number
national_numberNational identity or civil registration number
identity_cardNational identity card number
ssnUS Social Security Number
CountryType
AR โ€” Argentinatax_id
AT โ€” Austriatax_id
BE โ€” Belgiumnational_number
BG โ€” Bulgarianational_number
BR โ€” Braziltax_id
CL โ€” Chiletax_id
CO โ€” Colombiaidentity_card
CY โ€” Cyprustax_id
CZ โ€” Czech Republicnational_number
DE โ€” Germanytax_id
DK โ€” Denmarknational_number
EE โ€” Estonianational_number
ES โ€” Spaintax_id
FI โ€” Finlandnational_number
FR โ€” Francetax_id
GB โ€” United Kingdomnational_number
GR โ€” Greecetax_id
HR โ€” Croatianational_number
HU โ€” Hungarytax_id
IE โ€” Irelandtax_id
IT โ€” Italytax_id
LT โ€” Lithuanianational_number
LU โ€” Luxembourgnational_number
LV โ€” Latvianational_number
MT โ€” Maltatax_id
MX โ€” Mexicoidentity_card
NL โ€” Netherlandsnational_number
PL โ€” Polandnational_number
PT โ€” Portugaltax_id
RO โ€” Romanianational_number
SE โ€” Swedennational_number
SI โ€” Slovenianational_number
SK โ€” Slovakianational_number
TH โ€” Thailandtax_id
US โ€” United Statesssn
ZA โ€” South Africaidentity_card

Validation rules by country

Format and checksum rules applied when validating a submitted TIN.

๐Ÿ‡ฆ๐Ÿ‡ท Argentina (AR) - ArTinValidator

Format: DNI (7-8 digits) OR CUIT (11 digits) Regex: /^(?:\d{7,8}|\d{2}-\d{8}-\d)$/ (normalized) Validation:

  • DNI: Simple 7-8 digit number
  • CUIT: 11 digits with Modulo 11 checksum Valid Examples: 12345678, 20-12345678-9

๐Ÿ‡ฆ๐Ÿ‡น Austria (AT) - AtTinValidator

Format: 9 digits (Abgabenkontonummer) Regex: /^\d{9}$/ Validation: Luhn-like algorithm with weighted sum

  • Odd positions (1-based): Add digit directly
  • Even positions (1-based): Multiply by 2, add cross-sum
  • Check digit = (10 - (sum % 10)) % 10 Valid Examples: 123456789

๐Ÿ‡ง๐Ÿ‡ช Belgium (BE) - BeTinValidator

Format: 11 digits (National Number) Regex: /^\d{11}$/ Validation: Modulo 97 checksum

  • Pre-2000: Check = 97 - (First9Digits % 97)
  • Post-2000: Check = 97 - ((2000000000 + First9Digits) % 97) Valid Examples: 85073003361, 00012312345

๐Ÿ‡ง๐Ÿ‡ฌ Bulgaria (BG) - BgTinValidator

Format: 10 digits (EGN - Unified Civil Number) Regex: /^\d{10}$/ Validation: Weighted sum modulo 11

  • Weights: [2, 4, 8, 5, 10, 9, 7, 3, 6]
  • If remainder < 10: check digit = remainder
  • If remainder == 10: check digit = 0 Valid Examples: 1234567890

๐Ÿ‡ง๐Ÿ‡ท Brazil (BR) - BrTinValidator

Format: 11 digits (CPF) Regex: /^\d{11}$/ Validation: Dual check-digit validation (Modulo 11)

  • First check digit: Weighted sum of first 9 digits
  • Second check digit: Weighted sum of first 10 digits Valid Examples: 12345678909

๐Ÿ‡จ๐Ÿ‡ฑ Chile (CL) - ClTinValidator

Format: 7-9 characters (RUT/CI) Regex: /^\d{7,8}[0-9K]$/ (normalized) Validation: Modulo 11 checksum

  • Multipliers cycle: 2, 3, 4, 5, 6, 7, 2, 3...
  • Remainder 11 โ†’ '0', Remainder 10 โ†’ 'K', else โ†’ digit Valid Examples: 12.345.678-5, 12345678-5, 12.345.670-K

๐Ÿ‡จ๐Ÿ‡ด Colombia (CO) - CoTinValidator

Format: 6-10 digits (CC - Cรฉdula de Ciudadanรญa) Regex: /^\d{6,10}$/ Validation: Format only (no checksum) Valid Examples: 123456, 1234567890


๐Ÿ‡จ๐Ÿ‡พ Cyprus (CY) - CyTinValidator

Format: 8 digits + 1 letter (TIC) Regex: /^\d{8}[A-Z]$/ Validation: Custom translation map for even indices

  • Even indices use translation map
  • Odd indices add directly
  • Sum % 26 โ†’ Letter (A-Z) Valid Examples: 12345678A

๐Ÿ‡จ๐Ÿ‡ฟ Czech Republic (CZ) - CzTinValidator

Format: 9 or 10 digits (DIฤŒ/RฤŒ) Regex: /^\d{9,10}$/ Validation:

  • 10 digits: (First 9 % 11) % 10 == 10th digit
  • 9 digits: No checksum (pre-1954) Valid Examples: 1234567890, 123456789

๐Ÿ‡ฉ๐Ÿ‡ช Germany (DE) - DeTinValidator

Format: 11 digits (Steuer-Identifikationsnummer) Regex: /^\d{11}$/ Validation: ISO 7064 Mod 11,10 + structure check

  • First digit cannot be 0
  • Exactly one digit must repeat 2 or 3 times in first 10 digits
  • ISO 7064 Mod 11,10 checksum Valid Examples: 12345678902

๐Ÿ‡ฉ๐Ÿ‡ฐ Denmark (DK) - DkTinValidator

Format: 10 digits (CPR) Regex: /^\d{10}$/ Validation: Format only (no checksum) Valid Examples: 1234567890


๐Ÿ‡ช๐Ÿ‡ช Estonia (EE) - EeTinValidator

Format: 11 digits (Isikukood) Regex: /^\d{11}$/ Validation: Weighted sum modulo 11 (two-stage)

  • Weights1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 1]
  • If remainder == 10, use Weights2: [3, 4, 5, 6, 7, 8, 9, 1, 2, 3]
  • If still 10, check digit = 0 Valid Examples: 12345678901

๐Ÿ‡ช๐Ÿ‡ธ Spain (ES) - EsTinValidator

Format: NIF (8 digits + letter) OR NIE (X/Y/Z + 7 digits + letter) Regex: /^(\d{8}|[XYZ]\d{7})[A-Z]$/ Validation: Modulo 23 with letter mapping

  • NIE: Replace Xโ†’0, Yโ†’1, Zโ†’2
  • Number % 23 โ†’ Letter from "TRWAGMYFPDXBNJZSQVHLCKE" Valid Examples: 12345678Z, X1234567L

๐Ÿ‡ซ๐Ÿ‡ฎ Finland (FI) - FiTinValidator

Format: 11 characters (HETU) Regex: /^\d{6}[+\-A]\d{3}[0-9A-Z]$/ Validation: Modulo 31 checksum

  • Combine DDMMYY + NNN (ignore separator)
  • Number % 31 โ†’ Check char from "0123456789ABCDEFHJKLMNPRSTUVWXY" Valid Examples: 010190-123A

๐Ÿ‡ซ๐Ÿ‡ท France (FR) - FrTinValidator

Format: 13 digits (NIF) Regex: /^[0-3]\d{12}$/ Validation: Format only - first digit must be 0, 1, 2, or 3 Valid Examples: 0123456789012, 1123456789012


๐Ÿ‡ฌ๐Ÿ‡ง United Kingdom (GB) - GbTinValidator

Format: 2 letters + 6 digits + 1 letter (NINO) Regex: /^[A-CEGHJ-PR-TW-Z]{1}[A-CEGHJ-NPR-TW-Z]{1}[0-9]{6}[A-D]{1}$/ Validation: Format + forbidden prefix check

  • Forbidden prefixes: BG, GB, KN, NK, NT, TN, ZZ, OO Valid Examples: AB123456C

๐Ÿ‡ฌ๐Ÿ‡ท Greece (GR) - GrTinValidator

Format: 9 digits (AFM) Regex: /^\d{9}$/ Validation: Weighted sum modulo 11

  • Weights: [256, 128, 64, 32, 16, 8, 4, 2]
  • Check digit = (Sum % 11) % 10 Valid Examples: 123456789

๐Ÿ‡ญ๐Ÿ‡ท Croatia (HR) - HrTinValidator

Format: 11 digits (OIB) Regex: /^\d{11}$/ Validation: ISO 7064 Mod 11,10 Valid Examples: 12345678901


๐Ÿ‡ญ๐Ÿ‡บ Hungary (HU) - HuTinValidator

Format: 10 digits (Adรณazonosรญtรณ jel) Regex: /^\d{10}$/ Validation: Weighted sum modulo 11

  • Weights: [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • If remainder == 10: Invalid
  • Else: Check digit = remainder Valid Examples: 1234567890

๐Ÿ‡ฎ๐Ÿ‡ช Ireland (IE) - IeTinValidator

Format: 7 digits + 1 or 2 letters (PPS) Regex: /^\d{7}[A-Z]{1,2}$/ Validation: Weighted sum modulo 23

  • Weights for first 7 digits: [8, 7, 6, 5, 4, 3, 2]
  • If 9 chars, add (9th char value ร— 9) to sum
  • Remainder 0 โ†’ 'W', else โ†’ letter from A-Z Valid Examples: 1234567W, 1234567WA

๐Ÿ‡ฎ๐Ÿ‡น Italy (IT) - ItTinValidator

Format: 16 characters (Codice Fiscale) Regex: /^[A-Z]{6}\d{2}[ABCDEHLMPRST]\d{2}[A-Z]\d{3}[A-Z]$/ Validation: Complex odd/even position mapping

  • Odd positions: Custom value map
  • Even positions: 0-9 = 0-9, A-Z = 0-25
  • Sum % 26 โ†’ Check letter Valid Examples: RSSMRA00A01H501X

๐Ÿ‡ฑ๐Ÿ‡น Lithuania (LT) - LtTinValidator

Format: 11 digits (Asmens kodas) Regex: /^\d{11}$/ Validation: Same as Estonia (two-stage weighted sum)

  • Weights1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 1]
  • If remainder == 10, use Weights2: [3, 4, 5, 6, 7, 8, 9, 1, 2, 3] Valid Examples: 12345678901

๐Ÿ‡ฑ๐Ÿ‡ป Latvia (LV) - LvTinValidator

Format: 11 digits (Personas kods) Regex: /^\d{11}$/ Validation: Format only (post-2017 IDs have no checksum) Valid Examples: 12345678901


๐Ÿ‡ฑ๐Ÿ‡บ Luxembourg (LU) - LuTinValidator

Format: 13 digits (Matricule) Regex: /^\d{13}$/ Validation: Dual checksum (Luhn + Verhoeff)

  • 12th digit = Luhn checksum of first 11 digits
  • 13th digit = Verhoeff checksum of first 11 digits Valid Examples: 1234567890123

๐Ÿ‡ฒ๐Ÿ‡น Malta (MT) - MtTinValidator

Format: 7 digits + letter OR 9 digits Regex: /^(\d{7}[ABGHLMPZ]|\d{9})$/ Validation: Format only

  • Identity Card: 7 digits + letter (A, B, G, H, L, M, P, Z)
  • Taxpayer Reference: 9 digits Valid Examples: 1234567M, 123456789

๐Ÿ‡ฒ๐Ÿ‡ฝ Mexico (MX) - MxTinValidator

Format: 18 characters (CURP) Regex: /^[A-Z]{4}\d{6}[HM][A-Z]{5}[A-Z0-9]\d$/ Validation: Format only (case-insensitive) Valid Examples: HEGG560427MVZRRL04


๐Ÿ‡ณ๐Ÿ‡ฑ Netherlands (NL) - NlTinValidator

Format: 9 digits (BSN) Regex: /^\d{9}$/ Validation: 11-test (weighted sum)

  • Weights: [9, 8, 7, 6, 5, 4, 3, 2, -1]
  • Sum % 11 must equal 0 Valid Examples: 123456782

๐Ÿ‡ต๐Ÿ‡ฑ Poland (PL) - PlTinValidator

Format: 11 digits (PESEL) Regex: /^\d{11}$/ Validation: Weighted sum

  • Weights: [1, 3, 7, 9, 1, 3, 7, 9, 1, 3]
  • Check digit = (10 - (sum % 10)) % 10 Valid Examples: 12345678901

๐Ÿ‡ต๐Ÿ‡ท Puerto Rico (PR) - UsTinValidator

Uses US SSN validation (same as US)


๐Ÿ‡ต๐Ÿ‡น Portugal (PT) - PtTinValidator

Format: 9 digits (NIF) Regex: /^\d{9}$/ Validation: Weighted sum modulo 11

  • Weights: [9, 8, 7, 6, 5, 4, 3, 2]
  • If remainder < 2: check digit = 0
  • Else: check digit = 11 - remainder Valid Examples: 123456789

๐Ÿ‡ท๐Ÿ‡ด Romania (RO) - RoTinValidator

Format: 13 digits (CNP) Regex: /^\d{13}$/ Validation: Weighted sum modulo 11

  • Weights: [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9]
  • If remainder == 10: check digit = 1
  • Else: check digit = remainder Valid Examples: 1234567890123

๐Ÿ‡ธ๐Ÿ‡ช Sweden (SE) - SeTinValidator

Format: 10 or 12 digits (Personnummer) Regex: /^(\d{10}|\d{12})$/ Validation: Luhn algorithm

  • If 12 digits, drop first 2 (century)
  • Luhn checksum on remaining 10 digits Valid Examples: 1234567890, 201234567890

๐Ÿ‡ธ๐Ÿ‡ฎ Slovenia (SI) - SiTinValidator

Format: 8 digits (Davฤna ลกtevilka) Regex: /^\d{8}$/ Validation: Weighted sum modulo 11

  • Weights: [8, 7, 6, 5, 4, 3, 2]
  • If remainder 0 or 1: check digit = 0
  • Else: check digit = 11 - remainder Valid Examples: 12345678

๐Ÿ‡ธ๐Ÿ‡ฐ Slovakia (SK) - SkTinValidator

Format: 9 or 10 digits (Rodnรฉ ฤรญslo) Regex: /^\d{9,10}$/ Validation:

  • 10 digits: (First 9 % 11) % 10 == 10th digit
  • 9 digits: No checksum (pre-1954) Valid Examples: 1234567890, 123456789

๐Ÿ‡น๐Ÿ‡ญ Thailand (TH) - ThTinValidator

Format: 13 digits (TIC) Regex: /^\d{13}$/ Validation: Format only (no checksum) Valid Examples: 1234567890123


๐Ÿ‡บ๐Ÿ‡ธ United States (US) - UsTinValidator

Format: 9 digits (SSN) Regex: Complex validation (not simple regex) Validation: Multiple rules

  • Cannot start with 666, 000, or 9xx
  • Group number (digits 4-5) cannot be 00
  • Serial number (digits 6-9) cannot be 0000 Valid Examples: 123-45-6789, 123456789 Invalid Examples: 666-12-3456, 000-12-3456, 123-00-3456

๐Ÿ‡ฟ๐Ÿ‡ฆ South Africa (ZA) - ZaTinValidator

Format: 13 digits (SAID) Regex: /^\d{13}$/ Validation: Luhn checksum

  • Last digit must match Luhn checksum of first 12 digits Valid Examples: 8001015009087

Total: 36 countries supported Validation Types:

  • Simple Regex: 6 countries (CO, DK, FR, LV, MX, TH)
  • Checksum Validation: 30 countries (various algorithms)