using System.Collections.Generic;
using System.Text.RegularExpressions;
public interface ISerialNumberGenerator
IEnumerable<string> GenerateSeries(string serialNumber, int quantity);
public class SerialNumberGenerator : ISerialNumberGenerator
private static readonly Regex SerialRegex = new Regex(@"^([a-zA-Z]+)(\d+)$");
public IEnumerable<string> GenerateSeries(string serialNumber, int quantity)
if (string.IsNullOrEmpty(serialNumber))
throw new ArgumentNullException("O número de série não pode ser nulo");
throw new ArgumentException("A quantidade deve ser maior ou igual a 0");
if (!SerialRegex.IsMatch(serialNumber))
throw new ArgumentException("Formato de número de série inválido");
string newSerialNumber = IncrementSerialNumber(acc);
if (newSerialNumber.Length != serialNumber.Length)
throw new InvalidOperationException(
"Impossivel gerar uma nova série com o mesmo número de caracteres!"
private string IncrementSerialNumber(string serialNumber)
var match = SerialRegex.Match(serialNumber);
var prefix = match.Groups[1].Value;
int numericPart = int.Parse(match.Groups[2].Value);
string newNumericPart = numericPart.ToString().PadLeft(match.Groups[2].Length, '0');
return prefix + newNumericPart;
public static void Main(string[] args)
var generator = new SerialNumberGenerator();
Console.WriteLine("\n--- Gerador de Números de Série ---");
Console.WriteLine("Digite o número de série (ex: ABC1008):");
string serialNumber = Console.ReadLine();
Console.WriteLine("Digite a quantidade de novas séries a serem geradas:");
int quantity = int.Parse(Console.ReadLine());
var newSeries = generator.GenerateSeries(serialNumber, quantity);
Console.WriteLine("\n--- Séries Geradas ---");
foreach (var serie in newSeries)
Console.WriteLine(serie);
Console.WriteLine("\nEntrada inválida para quantidade! Digite um número válido!\n");
catch (ArgumentNullException ex)
Console.WriteLine($"\nErro! {ex.Message}");
catch (ArgumentException ex)
Console.WriteLine($"\nErro! {ex.Message}\n");
catch (InvalidOperationException e)
Console.WriteLine($"Erro {e.Message}\n");
Console.WriteLine($"\nOcorreu um erro no programa: {e.Message}");
Console.WriteLine("\n---\n Deseja continuar?(s/n) \n");
var exit = Console.ReadLine();