National ID & Tax ID Validator avatar

National ID & Tax ID Validator

Pricing

from $0.40 / 1,000 id checkeds

Go to Apify Store
National ID & Tax ID Validator

National ID & Tax ID Validator

Validate and decode national, tax and company IDs in bulk: PESEL, CPF, CNPJ, codice fiscale, Partita IVA, BSN, DNI/NIE, Aadhaar, CURP, RFC, SIREN, INSEE and more, plus passport MRZ. Birth date, sex, region. 222 ID types, 108 countries and territories. $0.40 per 1,000 IDs.

Pricing

from $0.40 / 1,000 id checkeds

Rating

0.0

(0)

Developer

Soxoj

Soxoj

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

12 hours ago

Last modified

Categories

Share

Catch fake and mistyped ID numbers in bulk, and get the data hidden inside them: birth date, sex, region and more. 222 ID types from 108 countries and territories, plus passport MRZ.

What you get

  • Validation: checksum check wherever a public algorithm exists
  • Decoding: date of birth, sex, region or place of birth, citizenship, serial number, depending on the type
  • Derived identifiers: data that follows from the number itself, e.g. the official <personal code>@eesti.ee e-mail address of Estonian ID card holders, or the place of birth from a French INSEE number
  • Auto-detection: no need to know the document type; every type the value fits is returned
  • Formatted value: the number in its usual printed layout

Supported IDs

Validated with a checksum, and decoded where the number encodes data: PESEL (Poland), NIP (Poland), CPF (Brazil), codice fiscale (Italy), BSN (Netherlands), personnummer and samordningsnummer (Sweden), fødselsnummer (Norway), HETU (Finland), DNI and NIE (Spain), DNI (Argentina), NIF (Portugal), Steuer-ID and Steuernummer (Germany), INSEE / NIR (France), Belgian national number, CNP (Romania), EGN (Bulgaria), OIB (Croatia), JMBG / EMŠO (Balkans), rodné číslo (Czechia, Slovakia), isikukood (Estonia), asmens kodas (Lithuania), personas kods (Latvia), PPS (Ireland), AHV / AVS (Switzerland), TC Kimlik No (Turkey), Teudat Zehut (Israel), Emirates ID, Aadhaar (India), NRIC / FIN (Singapore), HKID (Hong Kong), My Number (Japan), Chinese Resident ID, Thai national ID, Taiwan national ID, South African ID, CURP (Mexico), RUT / RUN (Chile), SIN (Canada), TFN and Medicare (Australia), IRD and NHI (New Zealand), EU VAT for Belgium, Denmark, Austria and Czechia, and more.

Company and tax registration numbers: CNPJ (Brazil), SIREN / SIRET (France), Partita IVA (Italy), CIF (Spain), REGON (Poland), RFC (Mexico), CUIT (Argentina), RUC (Peru, Ecuador, Paraguay), NIT (Colombia), ABN / ACN (Australia), UEN (Singapore), USCC (China), Y-tunnus (Finland), orgnr (Sweden, Norway), GSTIN (India, with the embedded PAN), EU VAT numbers of most member states and the UK, and more.

Format check only (no public checksum, so valid stays null): SSN, ITIN and EIN (US), NINO (UK), PAN (India), CPR (Denmark), kennitala (Iceland), CNIC (Pakistan), MyKad / NRIC (Malaysia), Saudi ID / Iqama, NIK (Indonesia), NIN (Nigeria), PhilSys, Korean RRN, Egyptian national ID, and more.

Passport MRZ: the two-line passport format (TD3) from any country, check digits verified.

Use cases

  • KYC onboarding: reject typos and invented numbers before paying for full verification
  • Consistency checks: compare the birth date and sex encoded in an ID with what the user entered
  • Data cleaning: classify and normalize identifier columns in bulk

Input

FieldRequiredDescription
valuesyesIdentifiers, one per line
countrynoISO 3166 alpha-3 (or alpha-2), e.g. EST. Only this country's types are tried
typenoExact type, e.g. est_personal_id, taken from an earlier run
{"values": ["37605030299"], "country": "EST"}

Output

One row per matching type:

{
"value": "37605030299",
"valid": true,
"type": "est_personal_id",
"checksum_verified": true,
"formatted": "37605030299",
"fields": {"email": "37605030299@eesti.ee", "yyyymmdd": "1976-05-03", "gender": "male", "sn": "029", "checksum": 9}
}
  • valid: true = a checksum matched; false = nothing matched; null = no country or type given, or only format-only types matched. Without a hint it stays null because short numbers from different countries often share a format and a random number passes some country's checksum about a third of the time.
  • checksum_verified: false means only the format matched: the type has no public checksum.
  • A value that fits no type gives one row with empty type.

Pricing

You pay per identifier checked, however many types it matches.

Privacy

Identifiers are not logged or stored by us. They end up only in your own dataset.

Limitations

  • Not a registry check. A valid number may never have been issued, or may belong to someone else.
  • Passport MRZ: the two-line passport format (TD3) only; ID-card and visa MRZ are not supported.