From 8ae705dc3bf80e576418cced1c5a1a583e07b167 Mon Sep 17 00:00:00 2001 From: Triskell Studio Date: Wed, 24 Jun 2026 15:20:52 +0200 Subject: [PATCH] fix(i18n/fr): reject comma as gender/Corsica suffix in fr_ssn The SSN regex used the character classes [1,2] and 2[A,B], which also match a literal comma. fr_ssn(', 84 12 76 451 089') was therefore accepted as valid. Drop the commas ([12] and [AB]); valid SSNs are unaffected. --- src/validators/i18n/fr.py | 4 ++-- tests/i18n/test_fr.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/validators/i18n/fr.py b/src/validators/i18n/fr.py index cba93bc1..10a5a2b1 100644 --- a/src/validators/i18n/fr.py +++ b/src/validators/i18n/fr.py @@ -13,10 +13,10 @@ def _ssn_pattern(): """SSN Pattern.""" return re.compile( - r"^([1,2])" # gender (1=M, 2=F) + r"^([12])" # gender (1=M, 2=F) r"\s(\d{2})" # year of birth r"\s(0[1-9]|1[0-2])" # month of birth - r"\s(\d{2,3}|2[A,B])" # department of birth + r"\s(\d{2,3}|2[AB])" # department of birth r"\s(\d{2,3})" # town of birth r"\s(\d{3})" # registration number r"(?:\s(\d{2}))?$", # control key (may or may not be provided) diff --git a/tests/i18n/test_fr.py b/tests/i18n/test_fr.py index 1e648222..30c1588a 100644 --- a/tests/i18n/test_fr.py +++ b/tests/i18n/test_fr.py @@ -34,6 +34,7 @@ def test_returns_true_on_valid_ssn(value: str): (None,), ("",), ("3 84 12 76 451 089 46",), # wrong gender number + (", 84 12 76 451 089",), # comma is not a valid gender (regex char-class bug) ("1 84 12 76 451 089 47",), # wrong control key ("1 84 00 76 451 089",), # invalid month ("1 84 13 76 451 089",), # invalid month