DE
Anmelden Veröffentlichen
contextetech /

Garde-fou RGPD : masquer les données personnelles

v1
Zielmodell : Allgemein (alle Modelle) Französisch Lizenz: MIT Veröffentlicht am aktualisiert vor 2 Stunden 1 Nutzungen

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.

Regeln

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.

Testfälle

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

Code

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

Noch keine Kommentare. Teile deine Erfahrung, sie hilft den Nächsten.