| | | 1 | | using System.Text.RegularExpressions; |
| | | 2 | | |
| | | 3 | | namespace FAU.Logica.Validadores; |
| | | 4 | | |
| | | 5 | | public static class NumeroCuentaValidator |
| | | 6 | | { |
| | | 7 | | /// <summary> |
| | | 8 | | /// Valida el número de cuenta según el código de banco. |
| | | 9 | | /// Retorna null si es válido, mensaje de error si no. |
| | | 10 | | /// La validación se aplica sobre el número ya normalizado (sin guiones). |
| | | 11 | | /// </summary> |
| | | 12 | | public static string? Validar(string codigoBanco, string? numeroCuenta) |
| | | 13 | | { |
| | 20 | 14 | | if (string.IsNullOrWhiteSpace(numeroCuenta)) |
| | 3 | 15 | | return null; // campo opcional |
| | | 16 | | |
| | 17 | 17 | | var normalizado = Normalizar(numeroCuenta); |
| | | 18 | | |
| | 17 | 19 | | return codigoBanco.ToUpperInvariant() switch |
| | 17 | 20 | | { |
| | 8 | 21 | | "BROU" => ValidarBROU(normalizado), |
| | 17 | 22 | | // TODO: agregar validación específica para cada banco al incorporarlo |
| | 9 | 23 | | _ => ValidarGenerico(normalizado) |
| | 17 | 24 | | }; |
| | | 25 | | } |
| | | 26 | | |
| | | 27 | | /// <summary> |
| | | 28 | | /// Elimina guiones del número de cuenta (normalización interna). |
| | | 29 | | /// </summary> |
| | | 30 | | public static string Normalizar(string numeroCuenta) => |
| | 26 | 31 | | numeroCuenta.Replace("-", ""); |
| | | 32 | | |
| | | 33 | | /// <summary> |
| | | 34 | | /// Formatea el número de cuenta para persistir según el banco: |
| | | 35 | | /// BROU → NNNNNNNNN-NNNNN (con guión), resto → solo dígitos. |
| | | 36 | | /// Llamar solo después de que Validar haya retornado null. |
| | | 37 | | /// </summary> |
| | | 38 | | public static string FormatearParaGuardar(string codigoBanco, string numeroCuenta) |
| | | 39 | | { |
| | 6 | 40 | | var digits = Normalizar(numeroCuenta); |
| | 6 | 41 | | return codigoBanco.ToUpperInvariant() == "BROU" |
| | 6 | 42 | | ? $"{digits[..9]}-{digits[9..]}" |
| | 6 | 43 | | : digits; |
| | | 44 | | } |
| | | 45 | | |
| | | 46 | | // ── BROU ───────────────────────────────────────────────────────────────── |
| | | 47 | | |
| | | 48 | | private static string? ValidarBROU(string normalizado) |
| | | 49 | | { |
| | 8 | 50 | | if (!Regex.IsMatch(normalizado, @"^\d{14}$")) |
| | 4 | 51 | | return "El número de cuenta BROU debe tener 14 dígitos (ej: 110534078-00001)."; |
| | | 52 | | |
| | 4 | 53 | | return null; |
| | | 54 | | } |
| | | 55 | | |
| | | 56 | | // ── Genérico ───────────────────────────────────────────────────────────── |
| | | 57 | | |
| | | 58 | | private static string? ValidarGenerico(string normalizado) |
| | | 59 | | { |
| | | 60 | | // TODO: reemplazar por validación específica del banco cuando se incorpore |
| | 9 | 61 | | if (!Regex.IsMatch(normalizado, @"^\d{4,20}$")) |
| | 4 | 62 | | return "El número de cuenta debe tener entre 4 y 20 dígitos."; |
| | | 63 | | |
| | 5 | 64 | | return null; |
| | | 65 | | } |
| | | 66 | | } |