using System.Text.RegularExpressions; using GeradoresService.Core; namespace GeradoresService.Generators.Identificacao; /// /// Número de passaporte português: uma letra seguida de 6 dígitos. /// Não existe dígito de controlo público no número em si; valida-se apenas o formato. /// public sealed partial class PassaporteGenerator : GeneratorBase { public override string Id => "passaporte"; public override string Name => "Passaporte"; public override string Category => Categories.Identificacao; public override string Description => "Número de passaporte português (letra + 6 dígitos). Apenas formato."; public override bool HasChecksum => false; public override GeneratedItem Generate(GeneratorContext context) => new($"{(char)('A' + context.Random.Next(26))}{context.Digits(6)}"); public override ValidationResult Validate(string value) { var p = Checksums.Clean(value).ToUpperInvariant(); return Pattern().IsMatch(p) ? ValidationResult.Valid(p, "Formato de passaporte português válido (sem dígito de controlo).") : ValidationResult.WrongFormat("Formato esperado: uma letra seguida de 6 dígitos (ex.: C123456)."); } [GeneratedRegex("^[A-Z][0-9]{6}$")] private static partial Regex Pattern(); }