Guides
Validation
Validate individual identifiers with checksum verification and metadata extraction.
Validation
Use validate() when you already know the detector type and need to confirm whether a single value is structurally valid. This is different from detect() which scans free text.
Basic validation
from fastpii import FastPII, DEFAULT_PRIORITY
from fastpii.countries.cz import CzechPack
engine = FastPII(priority=DEFAULT_PRIORITY)
engine.register(CzechPack())
result = engine.validate("8001011238", "rodne_cislo")
print(result.is_valid)
print(result.metadata)Expected output:
True
{
"checksum_valid": True,
"birth_date": "1980-01-01",
"gender": "male",
"article_9": True,
}ValidationResult fields
| Field | Type | Description |
|---|---|---|
detector | str | The detector name used for validation |
value | str | The input value |
is_valid | bool | Whether the value passed validation |
metadata | dict | Detector-specific metadata |
Validation by region
Czech Republic
engine = FastPII(priority=DEFAULT_PRIORITY)
engine.register(CzechPack())
engine.validate("8001011238", "rodne_cislo")
engine.validate("25596641", "ico")
engine.validate("CZ25596641", "dic")
engine.validate("123456/0300", "bank_account")Poland
from fastpii.countries.pl import PolishPack
engine = FastPII(priority=DEFAULT_PRIORITY)
engine.register(PolishPack())
engine.validate("44051401458", "pesel")
engine.validate("5260250274", "nip")
engine.validate("123456785", "regon")Germany
from fastpii.countries.de import GermanPack
engine = FastPII(priority=DEFAULT_PRIORITY)
engine.register(GermanPack())
engine.validate("86095742719", "steuer_id")
engine.validate("DE136695976", "ust_id")
engine.validate("München HRB 12345", "handelsregister")France
from fastpii.countries.fr import FrenchPack
engine = FastPII(priority=DEFAULT_PRIORITY)
engine.register(FrenchPack())
engine.validate("552120222", "siren")
engine.validate("73282932000074", "siret")
engine.validate("180012A00100161", "insee")Error handling
If the detector is not registered, validate() raises a KeyError:
try:
result = engine.validate("some_value", "unknown_detector")
except KeyError:
print("Detector not registered. Register the appropriate country pack first.")Validation failures do not raise exceptions. Instead, is_valid returns False:
result = engine.validate("0000000000", "rodne_cislo")
print(result.is_valid)
# False
print(result.metadata)
# {"checksum_valid": False, ...}Checksum algorithms
FastPII uses country-specific checksum algorithms for validation:
| Identifier | Algorithm |
|---|---|
| rodné číslo | Mod 11 with date/gender extraction |
| IČO | Weighted Mod 11 |
| DIČ | Format-specific validation |
| PESEL | Weighted Mod 10 |
| NIP | Weighted Mod 11 |
| REGON | Weighted Mod 11 (9/14 digit) |
| Steuer-ID | ISO 7064 MOD 11,10 |
| USt-IdNr | MOD 11,10 |
| SIREN | Luhn |
| SIRET | Luhn (embeds SIREN) |
| INSEE/NIR | Mod-97 with Corsica handling |