TIN_VALID¶
Info
New in Atfinity 17.
Description¶
TIN_VALID checks whether a string is a valid TIN (Tax Identification Number) for a given country. It verifies the country-specific format and checksum using the python-stdnum library. It does not verify that the number is actually registered with a tax authority — only that it is structurally valid.
The country is given as an ISO 3166-1 alpha-2 code and is matched case-insensitively (de, De, dE, and DE all select Germany). Spaces, dashes, and dots in the number are tolerated.
Syntax¶
Returns:
true— the number is a valid TIN for a supported country.false— the country is supported, but the number is not a valid TIN for it.unknown— the country is not supported (see the list below), or either argument is not a string. This lets rules distinguish "we checked and it is wrong" from "we cannot check this country". Guard for it explicitly where it matters, e.g.TIN_VALID(p.tin, p.country) = false.
Supported countries¶
For each country the underlying national scheme is listed. Where python-stdnum has no personal tax-number scheme, the country's VAT / business number is used as the closest available identifier — these show VAT in the Scheme column and will not accept a purely personal number.
| Country | Code | Scheme |
|---|---|---|
| Andorra | AD |
NRT |
| Argentina | AR |
CUIT |
| Australia | AU |
TFN (Tax File Number) |
| Austria | AT |
Steuernummer |
| Belgium | BE |
National Number (Rijksregisternummer) |
| Brazil | BR |
CPF |
| Bulgaria | BG |
EGN |
| Canada | CA |
SIN |
| Chile | CL |
RUT |
| China | CN |
Resident Identity Card |
| Colombia | CO |
NIT |
| Croatia | HR |
OIB |
| Cyprus | CY |
VAT |
| Czechia | CZ |
Rodné číslo |
| Denmark | DK |
CPR |
| Estonia | EE |
Isikukood |
| Finland | FI |
HETU |
| France | FR |
Numéro fiscal (NIF) |
| Germany | DE |
Steuer-Identifikationsnummer (IdNr) |
| Greece | GR |
AFM (VAT) |
| Hungary | HU |
VAT |
| Ireland | IE |
PPS Number |
| Israel | IL |
ID Number |
| Italy | IT |
Codice Fiscale |
| Latvia | LV |
VAT |
| Liechtenstein | LI |
PEID |
| Lithuania | LT |
Asmens kodas |
| Luxembourg | LU |
VAT |
| Malaysia | MY |
NRIC |
| Malta | MT |
VAT |
| Mexico | MX |
RFC |
| Monaco | MC |
VAT |
| Netherlands | NL |
BSN |
| New Zealand | NZ |
IRD |
| Norway | NO |
Fødselsnummer |
| Poland | PL |
PESEL |
| Portugal | PT |
NIF |
| Romania | RO |
CNP |
| Russia | RU |
INN |
| Serbia | RS |
PIB |
| Slovakia | SK |
Rodné číslo |
| Slovenia | SI |
EMŠO |
| South Africa | ZA |
TIN |
| South Korea | KR |
RRN |
| Spain | ES |
NIF / NIE |
| Sweden | SE |
Personnummer |
| Switzerland | CH |
AHV/AVS number |
| Thailand | TH |
TIN |
| Turkey | TR |
T.C. Kimlik No |
| Ukraine | UA |
RNTRC |
| United Kingdom | GB |
UTR (Unique Taxpayer Reference) |
| United States | US |
TIN (SSN / ITIN / EIN) |
What is not supported¶
- Any country not in the table above returns
unknown— the number is neither accepted nor rejected. - Countries showing VAT in the table (
CY,GR,HU,LU,LV,MC,MT): no personal tax-number scheme is available, so a business VAT number is validated instead. A purely personal identifier for these countries will not be accepted.
Example¶
Returns true — valid German IdNr.
Returns false — fails the German check digit.
Returns true — valid Spanish NIF (country code is case-insensitive).
Returns unknown — Japan is not in the supported list.
Example in context¶
Returns true only when the country is supported and the number is invalid — a safe condition for flagging a bad TIN without firing on countries that cannot be checked. Handle the unknown case separately if you want to warn that a country is unsupported.