FastPII Docs
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

FieldTypeDescription
detectorstrThe detector name used for validation
valuestrThe input value
is_validboolWhether the value passed validation
metadatadictDetector-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:

IdentifierAlgorithm
rodné čísloMod 11 with date/gender extraction
IČOWeighted Mod 11
DIČFormat-specific validation
PESELWeighted Mod 10
NIPWeighted Mod 11
REGONWeighted Mod 11 (9/14 digit)
Steuer-IDISO 7064 MOD 11,10
USt-IdNrMOD 11,10
SIRENLuhn
SIRETLuhn (embeds SIREN)
INSEE/NIRMod-97 with Corsica handling

On this page