public static string NossoNumeroDV(string cNossoNumero) { int nResto; int nTotalNumero = CobUtil.Modulo11Total(cNossoNumero, 9); nResto = (10 * nTotalNumero) % 11; string cDAC; if (nResto == 10) { cDAC = "X"; } else { cDAC = nResto.ToString(); } return(cDAC); }
/// <summary> /// Calcula o digito do nosso numero, já ajustando o comprimento total /// </summary> public static string NossoNumero(string cCarteira, ref string cModalidade, ref string cNossoNumero) { // para o digito verificador o nosso numero tem 11 digitos (Carteira+Modalidade+NossoNumero) // Mas quando o resto for 10, tem que aparecer 'P' // CobUtil.Modulo11Padrao(cCarteira + cModalidade + cNossoNumero, 7); // pagina 19 if (cNossoNumero.Length == 11) { cModalidade = ""; } else if (cModalidade.Length == 4) { // Modalidade com 4 digitos! cNossoNumero = CobUtil.Right(cNossoNumero, 7); } else { // Modalidade com 2 digitos cModalidade = CobUtil.Right(cModalidade, 2); cNossoNumero = CobUtil.Right(cNossoNumero, 9); } cCarteira = CobUtil.Right(cCarteira, 2); if (cModalidade.Length + cNossoNumero.Length != 11) { throw new Exception("Combinação Modalidade e Nosso numero invalidos"); } int TotalNumero = CobUtil.Modulo11Total(cCarteira + cModalidade + cNossoNumero, 7); TotalNumero *= 10; int Resto = TotalNumero % 11; if (Resto == 10) { return("P"); } else { return(Resto.ToString()); } }
/// <summary> /// Logica especial para modulo 11, que retorna -1 quando o resto é 1 /// </summary> /// <param name="sequencia">Sequencia a ser calculada</param> /// <returns>Retorna o digito, ou -1 quando nescessário</returns> public static int Modulo11Negativo(string sequencia) { int Total = CobUtil.Modulo11Total(sequencia, 7); // De acordo com a nota disponivel no manual do Banco Nossa Caixa na página 22 // o resto não deve ser aproximado, e deveremos considerar o digito=0 int Resto = Total % 11; if (Resto == 0) { return(0); } else if (Resto > 1) { return(11 - Resto); } else { // Recalcular D2 com (D1+1) // Retorna um valor negativo informando que deve ser recalculado com incremento return(-1); } }