/**
   * Verifica se o CPF informado é válido.
   *
   * @param cpf
   * @return boolean
   */
  public static boolean isCPFValido(String cpf) {
    int dig1;
    int dig2;
    int digito1;
    int digito2;
    int resto;
    int digitoCPF;
    String nDigResult = "";

    dig1 = 0;
    dig2 = 0;
    digito1 = 0;
    digito2 = 0;
    resto = 0;

    for (int nCount = 1; nCount < cpf.length() - 1; nCount++) {
      digitoCPF = Integer.valueOf(cpf.substring(nCount - 1, nCount));

      // multiplique a ultima casa por 2 a seguinte por 3 a
      // seguinte por 4
      // e assim por diante.
      dig1 = dig1 + (11 - nCount) * digitoCPF;

      // para o segundo digito repita o procedimento incluindo o
      // primeiro
      // digito calculado no passo anterior.
      dig2 = dig2 + (12 - nCount) * digitoCPF;
    }

    // Primeiro resto da divisão por 11.
    resto = (dig1 % 11);

    // Se o resultado for 0 ou 1 o digito é 0 caso contrário o
    // digito é 11
    // menos o resultado anterior.
    if (resto < 2) {
      digito1 = 0;
    } else {
      digito1 = 11 - resto;
    }

    dig2 += 2 * digito1;

    // Segundo resto da divisão por 11.
    resto = (dig2 % 11);

    // Se o resultado for 0 ou 1 o digito é 0 caso contrário o
    // digito é 11
    // menos o resultado anterior.
    if (resto < 2) {
      digito2 = 0;
    } else {
      digito2 = 11 - resto;
    }

    // Digito verificador do CPF que está sendo validado.
    String nDigVerific = cpf.substring(cpf.length() - 2, cpf.length());

    // Concatenando o primeiro resto com o segundo.
    nDigResult = UtilString.concatenar(nDigResult, digito1, digito2); // NOPMD

    // comparar o digito verificador do cpf com o primeiro resto + o segundo
    // resto.
    return nDigVerific.equals(nDigResult);
  }