private static int[] ObterDígitoVerificador(int[] cpfSemDigitoVerificador) { int resultado = 0; foreach (var item in cpfSemDigitoVerificador.Reverse() .Select((valor, index) => new { valor, multiplicador = index + 2 })) { resultado += item.valor * item.multiplicador; } resultado = resultado % 11; if (resultado < 2) { resultado = 0; } else { resultado = 11 - resultado; } if (cpfSemDigitoVerificador.Length == 9) { var cpfComUmDigitoVerificador = new int[10]; Array.Copy(cpfSemDigitoVerificador, cpfComUmDigitoVerificador, 9); cpfComUmDigitoVerificador[9] = resultado; resultado = (resultado * 10) + ObterDígitoVerificador(cpfComUmDigitoVerificador)[1]; } return(resultado < 10 ? new[] { 0, resultado } : Útil.TransformarIntEmArrayDeInt(resultado)); }
public static string Gerar(bool formatado) { var runSemDigitoVerificador = Útil.TransformarIntEmArrayDeInt(Útil.RandomSingle.Next(10000000, 99999999)); var digitoVerificador = ObterDígitoVerificador(runSemDigitoVerificador); var resultado = string.Join("", runSemDigitoVerificador) + digitoVerificador; if (formatado) resultado = resultado.Insert(2, ".").Insert(6, ".").Insert(10, "-"); return resultado; }
private static int[] GerarDigitosCpfSemDígitoVerificador() { int[] cpfSemDigitoVerificador; bool TodosOsDigitosSaoIguais; do { // os 8 primeiros dígitos de um cpf são números aleatórios, e o 9ª é o código da região que pode ir de 0 a 9 cpfSemDigitoVerificador = Útil.TransformarIntEmArrayDeInt(Útil.RandomSingle.Next(100000000, 999999998)); // Não é permitido em CPF números sequenciais como 111111111, 222222222 [...] 999999999 TodosOsDigitosSaoIguais = cpfSemDigitoVerificador.Distinct().Count() == 1; }while (TodosOsDigitosSaoIguais); return(cpfSemDigitoVerificador); }
public void TransformarIntEmArrayDeInt_TransformaIntEmArrayDeInt_True(int entrada, string resultadoEmString) { var array = Útil.TransformarIntEmArrayDeInt(entrada); Assert.Equal(string.Join("", array), resultadoEmString); }