private static readonly string _factorMultiplicador = "3179";
private static readonly string _PSP = "184";
private static readonly string _IdCliente = "400900000001";
public static void Main()
Console.WriteLine($"{GetPrimerBloqueCvu()}{GetSegundoBloqueCvu(_IdCliente)}");
private static string GetPrimerBloqueCvu()
var identificadorCvu = GetIdentificadorCvu();
var codigoPspFormateado = GetCodigoPspFormateado(_PSP);
var digitoVerificador = GenerateDigitoVerificador(codigoPspFormateado);
return $"{identificadorCvu}{codigoPspFormateado}{digitoVerificador}";
private static string GetSegundoBloqueCvu(string IdCliente)
var numeroReservado = GetNumeroReservado();
var cuentaFormateada = GetCuentaFormateada(IdCliente);
var digitoVerificador = GenerateDigitoVerificador(cuentaFormateada);
return $"{numeroReservado}{cuentaFormateada}{digitoVerificador}";
private static string GetCuentaFormateada(string IdCliente)
return $"{GetCodigoComercioFormateado(IdCliente)}";
private static string GetCodigoComercioFormateado(string IdCliente)
var codigoComercioNumerico = GetFormatNumber(IdCliente.ToUpper());
return codigoComercioNumerico.PadLeft(12, '0');
private static string GetNumeroReservado()
private static string GetIdentificadorCvu()
private static string GetCodigoPspFormateado(string codigoPsp)
var codigoPspFormateado = codigoPsp.PadLeft(4, '0');
return codigoPspFormateado.Substring(codigoPspFormateado.Length - 4, 4);
private static string GetFormatNumber(string valor)
var valorFormateado = "";
foreach (char c in valor)
var valorAscii = Convert.ToInt32(c);
if (valorAscii is >= 65 and <= 90)
valorFormateado = $"{valorFormateado}{valorAscii}";
else if (valorAscii is >= 48 and <= 57)
valorFormateado = $"{valorFormateado}{c}";
private static int GenerateDigitoVerificador(string valor)
var valorInverso = valor.Reverse().ToArray();
for (int i = 0; i < valorInverso.Count(); i++)
suma += int.Parse(valorInverso[i].ToString()) * int.Parse(_factorMultiplicador.ToArray()[j].ToString());
return (10 - (suma % 10)) % 10;