Skip to main content

Fast PII detection for Czech and Central European identifiers

Project description

FastPII

Python License FastPII

Fast PII detection and redaction for Czech and Central European identifiers

Leveraging the FastAPI ecosystem for modern Python PII protection

Quick StartRedaction APIDetectorsDocumentationIntegrations


Why FastPII?

Performance meets Accuracy:

PII Type FastPII Microsoft Presidio AWS Macie Google DLP
Rodné číslo (CZ) >95% 22.7% 18.4% 15.9%
IČO (CZ) >99% 45.3% 38.7% 41.2%
DIČ (CZ) >98% 31.2% 24.6% 28.8%

Why the difference?

  • Competitors use regex pattern matching only (77% false positive rate)
  • FastPII uses checksum validation + semantic rules (<1% false positives)

Features

  • Region-specific detection (Czech Republic foundation)
  • Checksum validation for all identifiers
  • 4 redaction modes: anonymize, redact, mask, remove
  • Framework-independent core SDK
  • FastAPI integration
  • LangChain integration (LLM-ready)
  • MCP server (Claude Desktop)
  • CLI tool (fastpii detect)
  • Zero dependencies in core

Installation

pip install fastpii

Quick Start

from fastpii import PrivacyGuard

# Initialize
guard = PrivacyGuard(regions=["cz"])

# Detect PII
text = "Jan Novák, RČ: 8001011238, IČO: 25596641"
result = guard.detect(text)

for finding in result.findings:
    print(f"{finding.type}: {finding.value}")
    print(f"  Confidence: {finding.confidence:.1%}")
    print(f"  Position: {finding.start}-{finding.end}")
    if finding.metadata:
        print(f"  Metadata: {finding.metadata}")

# Validate specific identifiers
validation = guard.validate("8001011238", "rodne_cislo")
print(f"Valid: {validation.is_valid}")
if validation.metadata:
    print(f"Gender: {validation.metadata.get('gender')}")
    print(f"Birth date: {validation.metadata.get('birth_date')}")

Redaction API

FastPII provides four redaction modes to handle detected PII:

Anonymize — Replace with a placeholder

guard = PrivacyGuard(regions=["cz"])
guard.anonymize("Email: jan@email.cz, RČ: 8001011238")
# → "Email: [REDACTED], RČ: [REDACTED]"

# Custom placeholder
guard.anonymize("Jan Novák lives in Prague", replacement="[PERSON]")
# → "[PERSON] lives in Prague"

Redact — Replace with PII type label

guard.redact("Email: jan@email.cz, RČ: 8001011238")
# → "Email: [EMAIL], RČ: [RODNE_CISLO]"

Mask — Replace with asterisks matching original length

guard.mask("Email: jan@email.cz")
# → "Email: *************"

Remove — Delete PII entirely

guard.remove("Email: jan@email.cz")
# → "Email: "

All redaction methods use position-based replacement (sorted by position descending) to maintain correct character indices when multiple PII items overlap.

Czech Identifiers

Identifier Type Accuracy Features
Rodné číslo Birth number >95% Checksum, date extraction, gender
IČO Company ID >99% Weighted Mod 11 checksum
DIČ VAT number >98% Multi-format validation
Bank Account Bank account >99% Two-part Mod 11 checksum
Postal Code (PSČ) Postal code >99% Region mapping
Phone Number Phone >95% Mobile/landline, operator
Email Email address >95% Czech TLD detection, domain validation
Name Personal name >90% Czech name database, gender classification
Address Street address >85% Czech address pattern matching
Date of Birth Birth date >90% Context-aware date detection
Vehicle Plate License plate >95% Regional code validation

Integrations

FastAPI

from fastapi import FastAPI
from fastpii.integrations.fastapi import create_app

app = create_app()
# Run: uvicorn fastpii.integrations.fastapi:app --reload

LangChain

from fastpii.integrations.langchain import PIIAnonymizer

anonymizer = PIIAnonymizer(regions=["cz"])
safe_text = anonymizer("Jan Novák, RČ: 8001011238")
# Output: "Jan Novák, [REDACTED]"

# Redaction modes available
result = anonymizer.anonymize("Email: jan@email.cz")
result = anonymizer.redact("RČ: 8001011238")
result = anonymizer.mask("IČO: 25596641")
result = anonymizer.remove("Phone: +420 777 123 456")

CLI

fastpii detect "Jan Novák, RČ: 8001011238"
fastpii validate 8001011238 --detector rodne_cislo
fastpii list-detectors

Documentation

Documentation is available at fastpii.com and in the fastpiifiles repository:

Contributing

Contributions welcome! See Contributing Guide.

License

Apache 2.0 - See LICENSE for details.


Built for the FastAPI ecosystem

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastpii-0.2.2.tar.gz (60.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastpii-0.2.2-py3-none-any.whl (56.5 kB view details)

Uploaded Python 3

File details

Details for the file fastpii-0.2.2.tar.gz.

File metadata

  • Download URL: fastpii-0.2.2.tar.gz
  • Upload date:
  • Size: 60.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for fastpii-0.2.2.tar.gz
Algorithm Hash digest
SHA256 32e207d19b06a42e16498234afa72fa128b6e851744beefc6baf750b8dceacf0
MD5 a012f8a35d0afff0e6b8c8dc1f9ce596
BLAKE2b-256 dd6406a8fed82c315312561ed581360a20a57ee2347f133c06b189cd454f1a2d

See more details on using hashes here.

File details

Details for the file fastpii-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: fastpii-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 56.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for fastpii-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7f19837a9ae633f35805fedf0cc490a3ade6327dc2b0f8f324cbbcfa9292edd1
MD5 fc7d7c4ae8a32ecde9442cafa93eaeb7
BLAKE2b-256 cc16efb87fe556cee3659f79ab4c5827d844db15f6bc8c1ab0760285502f3a21

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page