fix IBAN masking: support alphanumeric chars, keep AZ prefix

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ali 2026-03-26 15:43:16 +04:00
parent df9f72be11
commit dc273b3f2b
1 changed files with 5 additions and 4 deletions

View File

@ -2,9 +2,10 @@ import re
import frappe
# 223.1223.5: IBAN (AZ + 2 digits + 4 uppercase letters + 20 digits = 28 chars)
_IBAN_RE = re.compile(r"AZ\d{2}[A-Z]{4}\d{20}")
# 223.6: card/account number — любая последовательность 10+ цифр подряд
# 223.1223.5: IBAN (AZ + 2 digits + 4 uppercase letters + 20 alphanumeric = 28 chars)
# Оставляем "AZ" в начале, маскируем остальные 26 символов
_IBAN_RE = re.compile(r"AZ\d{2}[A-Z]{4}[A-Z0-9]{20}")
# 223.6: номер карты — любая последовательность 10+ цифр подряд
_DIGITS_RE = re.compile(r"\d{10,}")
MASK_IBAN = {"223.1", "223.2", "223.3", "223.4", "223.5"}
@ -13,7 +14,7 @@ MASK_CARD = {"223.6"}
def _mask(account_name, account_number):
if account_number in MASK_IBAN:
account_name = _IBAN_RE.sub(lambda m: "X" * len(m.group()), account_name)
account_name = _IBAN_RE.sub(lambda m: "AZ" + "X" * (len(m.group()) - 2), account_name)
if account_number in MASK_CARD:
account_name = _DIGITS_RE.sub(lambda m: "X" * len(m.group()), account_name)
return account_name