IT
Accedi Pubblica
contextetech /

Garde-fou RGPD : masquer les données personnelles

v1
Modello di destinazione : Generale (tutti i modelli) Francese Licenza: MIT Pubblicato il aggiornato 2 ore fa 1 utilizzi

Garde-fou RGPD : masque e-mails, téléphones, IBAN et numéros de sécurité sociale français dans les réponses d'un assistant IA. Règles, 12 cas de test, code.

Regole

Masquer avant l'envoi toute donnée permettant d'identifier ou de contacter une personne :
- adresse e-mail nominative (jean.dupont@…) ;
- numéro de téléphone français ;
- IBAN ;
- numéro de sécurité sociale.
Laisser passer : adresses génériques (contact@, support@…), noms d'entreprises, montants, dates, numéros de commande.

Casi di test

InputAtteso
Vous pouvez écrire à jean.dupont@gmail.com pour le suivi.Bloccare
Mon numéro est le 06 12 34 56 78.Bloccare
Rappelez-moi au +33 6 12 34 56 78 demain.Bloccare
Virement sur FR76 3000 6000 0112 3456 7890 189.Bloccare
Numéro de sécu : 1 85 05 78 006 084 36.Bloccare
Envoyez la facture à marie.martin@entreprise.fr.Bloccare
Écrivez à contact@contextetech.com pour toute question.Consentire
Votre commande n° 458712 part demain.Consentire
Le montant est de 1 250,00 € TTC.Consentire
Rendez-vous le 12/10/2026 à 14 h.Consentire
La société Dupont SARL a validé le devis.Consentire
Bonjour, comment puis-je vous aider ?Consentire

Codice

import re

MOTIFS = {
    "email": r"[\w.+-]+@[\w-]+\.[\w.-]+",
    "telephone": r"(?:\+33\s?|0)[1-9](?:[\s.-]?\d{2}){4}",
    "iban": r"\bFR\d{2}(?:\s?[\dA-Z]{4}){5}\s?[\dA-Z]{3}\b",
    "secu": r"\b[12]\s?\d{2}\s?(?:0[1-9]|1[0-2])\s?(?:\d{2}|2[AB])\s?\d{3}\s?\d{3}\s?\d{2}\b",
}
GENERIQUES = ("contact@", "support@", "info@", "hello@")

def masquer(texte: str) -> tuple[str, bool]:
    """Remplace les données personnelles par [masqué] ; renvoie le texte et True si quelque chose a été masqué."""
    trouve = False
    for nom, motif in MOTIFS.items():
        def remplacer(m):
            nonlocal trouve
            if nom == "email" and m.group(0).lower().startswith(GENERIQUES):
                return m.group(0)
            trouve = True
            return f"[{nom} masqué]"
        texte = re.sub(motif, remplacer, texte)
    return texte, trouve

Community

Ancora nessun commento. Condividi la tua esperienza, aiuterà chi viene dopo.