Batch ID Validator

Paste a column of ID numbers or import a CSV and validate every row locally: Brazil CPF/CNPJ, India GSTIN/PAN, Poland PESEL, Mexico RFC/CURP, Argentina CUIT, Colombia NIT, Indonesia NIK — plus passport MRZ lines and EU VAT formats. Per-row reasons, results CSV export. Numbers never leave your browser.

Single-number validator ↗

This is a format and check-digit pre-check. It does not query government databases and does not prove a number exists, is active, or belongs to anyone.

Validate a whole list at once

Paste a column of tax or ID numbers — or drop in a CSV — and get a per-row verdict with the exact reason each invalid number fails. Twelve ID types across seven countries, plus ICAO 9303 passport MRZ lines and EU VAT formats for all 27 member states — all computed locally in your browser.

Single-number validators

Brazil CPF / CNPJ · India GSTIN · India PAN · Poland PESEL · Mexico RFC · Mexico CURP · Argentina CUIT / CUIL · Colombia NIT · Indonesia NIK (KTP)

Run a validator on your own site: free embeddable widgets (CPF, GSTIN).

Validate an entire list of government-issued ID and tax numbers in one pass: paste one number per line — or import a CSV/TXT file — pick the country and type, and every row gets a verdict plus the exact reason it fails. Twelve ID types across seven countries — Brazil CPF/CNPJ, India GSTIN/PAN, Poland PESEL, Mexico RFC/CURP, Argentina CUIT, Colombia NIT, Indonesia NIK — plus ICAO 9303 passport MRZ lines and EU VAT number formats for all 27 member states.

Everything runs locally. The file is read by your browser, the checksum math runs in your browser, and the results CSV is assembled in your browser — the list never touches a server. For payroll, KYC-prep or CRM cleanup work where the column is literally people’s tax numbers, that is the difference between a quick pre-check and a data-handling incident.

The checks are the official algorithms, not regex guesses: CPF/CNPJ mod-11 (including the 2026+ alphanumeric CNPJ), GSTIN’s Luhn-mod-36 check character, PESEL’s weighted digit with its birth-date century encoding, RFC’s SAT check table with real-calendar-date rules, CURP’s 18-character structure with state codes, CUIT’s mod-11. The engine is extracted from our per-country validators and cross-verified against them row for row.

Boundary, stated plainly: this is a pre-check of structure and check digits. It does not query RENAPO, SAT, the GST portal or any registry, so it cannot confirm a number is registered, active, or belongs to a specific person. A pass means “well-formed”; a fail means the number cannot be right as typed — that alone catches most data-entry damage before it hits an official system.

Published behaviors — each validated against the live tool: a 3-column CSV with a header row auto-detects the ID column and lets you switch it · original columns are preserved in the exported results with Result/Type/Reason appended · a corrupted check digit is reported with the expected value · 2,000 rows validate in well under one second · validating triggers zero network requests. Last verified: 2026-08-12.

FAQ

How is this different from running numbers one by one?

Same math, industrial quantity: per-row verdicts with reasons, a summary count, and a results CSV that keeps your original columns. Accountants checking supplier lists, HR bulk-onboarding, and platform KYC-prep teams get in one paste what would otherwise be hundreds of copy-paste round trips.

Does a “valid” result mean the number really exists?

No — and no offline tool can promise that. Valid means the structure and check digit are mathematically correct, which is what registries themselves check first. Whether the number is registered to a real person or company can only be confirmed by the issuing authority (RENAPO, SAT, GST portal, etc.).

My CSV has many columns — which one gets validated?

The tool scores every column against the selected ID type’s shape and picks the best match automatically; a dropdown lets you override it. Exported results keep all original columns and append Result, Type and Reason at the end.

Can I mix ID types in one list?

Brazil CPF and CNPJ can be mixed freely — they are distinguished by length automatically. Other types are validated one type at a time; switch the country selector and re-run for a second pass. Cross-type auto-detection is deliberately avoided: silent guessing is how wrong verdicts happen.

Why do I see “check digit ✗ — expected X” instead of just “invalid”?

Because the reason is the fix. A single mistyped digit is the most common data-entry error, and showing the expected check value (or the exact failing layer: length, pattern, date, state code) lets you correct rows instead of discarding them.

Can it check passport MRZ lines and EU VAT numbers?

Yes. Paste passport MRZ line 2 (or both lines together) and all five ICAO 9303 check digits are recomputed — document number, birth date, expiry, personal number and the composite. EU VAT entries are matched against each member state’s official pattern (Greece = EL, Northern Ireland = XI); a format match does not mean the number is registered — only VIES can confirm that.