Como bloquear CPF com todos números iguais? (111.111.111-11)

30 respostas
D

Bom dia galera.

Tenho que bloquear todos os CPF com numeros iguais exemplo [CPF removido], [CPF removido] e assim por diante.

Se que tem varias soluções, como if de cada um, ou split e comparação.

Gostaria de saber se tem algum metodo ou regex que verifica se todos os caracteres da string são iguais?

Exemplo tenho a

String = “[telefone removido]”, como verificar se todos são iguais.

Valew.

30 Respostas

khaoz

Acredito que o Stella faz isso. Não vi se tem os fontes para baixar, mas se tiver baixa e da uma olhada como foi feito, ou então usar a lib mesmo.

ViniGodoy

Faça melhor do que isso, valide o dígito verificador do CPF.
http://www.clubedainformatica.com.br/documentos/mostraartigo.php?artigo=62

Assim você barra outros valores inválidos, tais como:
[CPF removido]

D

ViniGodoy:
Faça melhor do que isso, valide o dígito verificador do CPF.
http://www.clubedainformatica.com.br/documentos/mostraartigo.php?artigo=62

Assim você barra outros valores inválidos, tais como:
[CPF removido]

Mesmo validando, a entrada com td 1 por exemplo é válida :smiley:

ViniGodoy

Nesse caso, barrar esse CPF é fechar as portas para um cidadão brasileiro.

D

Nesse caso, barrar esse CPF é fechar as portas para um cidadão brasileiro.

Existe o cpf [CPF removido], por consultei na receita, e em todos os casos ocorreu de cadastro não encontrado.

claudneto

ViniGodoy:
Faça melhor do que isso, valide o dígito verificador do CPF.
http://www.clubedainformatica.com.br/documentos/mostraartigo.php?artigo=62

Assim você barra outros valores inválidos, tais como:
[CPF removido]

Eu acredito que essa seja a melhor saída mesmo…

Mas se vc quiser…se seu CPF for String…vc pode ver com cpf.charAt()…vendo char por char…

Se for numero…vc pode fazer divisoes sucessivas por 10 (%) e comparar…

L

Nesse caso, barrar esse CPF é fechar as portas para um cidadão brasileiro.

Existe o cpf [CPF removido], por consultei na receita, e em todos os casos ocorreu de cadastro não encontrado.

Mas pode ser por outro motivo (vai ver o cara morreu). Melhor mesmo é verificar se o dígito verificador está correto, isso te previne uns 99% dos erros, pois os outros 1% depende de informações que só a Receita Federal tem.

claudneto
package modulo2;

import java.util.Scanner;

public class VerificarCPF {
    
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Digite o CPF ([telefone removido]): ");
        String cpf = sc.nextLine();
        if (CPF(cpf)) {
            System.out.println ("Dígito válido!");
        }
        else {
            System.out.println ("Dígito inválido!");
        }
    }
    
    static public boolean CPF (String strCpf )
   {
      int     d1, d2;
      int     digito1, digito2, resto;
      int     digitoCPF;
      String  nDigResult;

      d1 = d2 = 0;
      digito1 = digito2 = resto = 0;

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

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

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

      //Primeiro resto da divisão por 11.
      resto = (d1 % 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;

      d2 += 2 * digito1;

      //Segundo resto da divisão por 11.
      resto = (d2 % 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 = strCpf.substring (strCpf.length()-2, strCpf.length());

      //Concatenando o primeiro resto com o segundo.
      nDigResult = String.valueOf(digito1) + String.valueOf(digito2);

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

}

Tá aí em Java...

D
claudneto:
package modulo2;

import java.util.Scanner;

public class VerificarCPF {
    
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Digite o CPF ([telefone removido]): ");
        String cpf = sc.nextLine();
        if (CPF(cpf)) {
            System.out.println ("Dígito válido!");
        }
        else {
            System.out.println ("Dígito inválido!");
        }
    }
    
    static public boolean CPF (String strCpf )
   {
      int     d1, d2;
      int     digito1, digito2, resto;
      int     digitoCPF;
      String  nDigResult;

      d1 = d2 = 0;
      digito1 = digito2 = resto = 0;

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

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

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

      //Primeiro resto da divisão por 11.
      resto = (d1 % 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;

      d2 += 2 * digito1;

      //Segundo resto da divisão por 11.
      resto = (d2 % 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 = strCpf.substring (strCpf.length()-2, strCpf.length());

      //Concatenando o primeiro resto com o segundo.
      nDigResult = String.valueOf(digito1) + String.valueOf(digito2);

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

}

Tá aí em Java...

Valew pelo codigo, porém o CFP [telefone removido], é considerado válido. E o meu cliente quer se seja bloqueado esses valores, vou dá mais uma pesquisada para verificar se realmente [telefone removido] é inválido, ou há a possibilidade de exister esse cpf.

Obrigado.

khaoz

Cara, em uma rápida consulta no site da Receita me pareceu que apenas o [CPF removido] é inválido. Para os outros existe a possibilidade de ser válido (inclusive o [CPF removido] tem dono :wink: )

claudneto
package modulo2;

import java.util.Scanner;

public class VerificarCPF {
    
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Digite o CPF ([telefone removido]): ");
        String cpf = sc.nextLine();
        if (CPF(cpf)) {
            System.out.println ("Dígito válido!");
        }
        else {
            System.out.println ("Dígito inválido!");
        }
    }
    
    static public boolean CPF (String strCpf )
   {
      int     d1, d2;
      int     digito1, digito2, resto;
      int     digitoCPF;
      String  nDigResult;
      String verifica = "";

      d1 = d2 = 0;
      digito1 = digito2 = resto = 0;
      for (int i = strCpf.length(); i >= 0; i--) { //verifica é o CPF ao contrario
          verifica = verifica + strCpf.charAt(i);
      }
      if (verifica.equals(strCpf)) { //Se o CPF ao contrario é igual o normal...os digitos são iguais...
          return false;
      }
      else {
          
        for (int nCount = 1; nCount < strCpf.length() - 1; nCount++)
        {
             digitoCPF = Integer.valueOf (strCpf.substring(nCount -1, nCount)).intValue();

            //multiplique a ultima casa por 2 a seguinte por 3 a seguinte por 4 e assim por diante.
            d1 = d1 + ( 11 - nCount ) * digitoCPF;
            
            //para o segundo digito repita o procedimento incluindo o primeiro digito calculado no passo anterior.
            d2 = d2 + ( 12 - nCount ) * digitoCPF;
        };
        
        //Primeiro resto da divisão por 11.
        resto = (d1 % 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;
             
        d2 += 2 * digito1;
        
        //Segundo resto da divisão por 11.
        resto = (d2 % 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 = strCpf.substring (strCpf.length()-2, strCpf.length());

        //Concatenando o primeiro resto com o segundo.
        nDigResult = String.valueOf(digito1) + String.valueOf(digito2);

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

Pronto... se os digitos forem iguais...ele retorna false e consequentemente Digito inválido!

D

Valew, foi falar isso p/ o cliente. Mas se ele quiser, fazer oq neh. Porque eu acha que tambem era valido, pois o algoritmo de verificação é da receita, e se aprova.

D

for (int i = strCpf.length(); i >= 0; i--) { //verifica é o CPF ao contrario verifica = verifica + strCpf.charAt(i); } if (verifica.equals(strCpf)) { //Se o CPF ao contrario é igual o normal...os digitos são iguais... return false; }

Achei muito interessante isso que foi fez, para verificar se os numeros são iguais, porem não funcionar em 100% dos casos, o numero 123454321 não é um numero com todos caracteres iguais e passa nessa verificação.

Mas consegui fazer com regex. Obrigado a todos que me ajudaram. Segue o código para ficar registrado no forum e futuramente ser usado.

java.util.regex.Pattern p = java.util.regex.Pattern.compile(suaString.charAt(0)+"{"+suaString.length()+"}"); 
    java.util.regex.Matcher m = p.matcher(suaString); 
    if(m.find()) System.out.println("Todos os caracteres são iguais!!!");

Valew galera.
t+

claudneto

É verdade...agora que vc disse que eu percebi...

for (int i = 0; strCpf.charAt(i) != strCpf.charAt(i + 1), i < strCpf.length() - 1; i++) {
          if (i != strCpf.length()) {
              verifica = true;
          }
}

Não sei pq tá com erro aqui...mas...

for (int i = 0; strCpf.charAt(i) != strCpf.charAt(i + 1), i < strCpf.length() - 1; i++) {
          if (i != strCpf.length()) {
              verifica = true;
          }
      }
      
      if (!verifica) {
          return false;
      }
      else {//...

Faz isso e testa...ele vai comparar char por char...se no fim...o i == strCpf.length() (ou seja...ele chegou no fim e não achou diferente...)...ele retorna false...digito invalido...se ele não chegou no fim...ele faz os calculos...

Eu acho que funciona...testa ae e concerta ali em cima...

sergiotaborda

Depois de ninguém ter entendido a sua pergunta vc mesmo resolveu. :lol:
Obrigado, eu tinha a mesma duvida.

peerless

Ainda acho melhor verificar se é válido, ao invés do contrário! :slight_smile:

Lavieri

Ps.: ps desculpa desenterrar esse post antigo, mais é apenas para dar uma informação + precisa.

Apenas respondendo, dos CPFs com números iguais apenas o [CPF removido] passa pela validação do digito verificador, porém a propria receita federal informa que este CPF não é valido

Segue documentação: http://www.receita.fazenda.gov.br/publico/Legislacao/atos/AtosConjuntos/AnexoIADEConjuntoCoratCotec0012002.doc

todos os CPF iguais são invalidos, e nem passam pela validação dos digitos verificadores, isso é tanto verdade que os CPF [CPF removido] e [CPF removido] estão em situação cadastral CANCELADA…

caso alguem precise validar um CPF basta calcular o digito verificador correto, e fazer a conta abaixo, e ver c ele bate com os digitos do CPF informado.

cpfInformado.subString(8,11).equals(digitValidator(cpfInformado)) //com esse teste vc pode validar o CPF, seque apenas um trecho da minha classe

/* Regra para validação de cpf:
 * 
 * Os digitos verificadores são formados por 2 digitos XY, calculados da seguinte 
 * forma
 * 
 * 1° digito verificador (X): somar o valor da multiplicação dos 9 primeiros digitos
 * do cpf por 10,9,8,7,6,5,4,3,2 (cpf[0]*10 + cpf[1]*9 + ... + cpf[8]*2). Depois
 * pegar o resto da divisão desta soma por 11. Verificar se o resto da divisão é
 * menor ou igual a 1, e neste caso o digito verificador será 0, caso contrario o
 * digito verificador será 11 subtraido do resto da divisão da soma por 11 
 * (11 - soma%11).
 * 
 * 1° digito verificador (Y): somar o valor da multiplicação dos 9 primeiros digitos
 * do cpf por 10,9,8,7,6,5,4,3,2 (cpf[0]*10 + cpf[1]*9 + ... + cpf[8]*2). Depois
 * pegar o resto da divisão desta soma por 11. Verificar se o resto da divisão é
 * menor ou igual a 1, e neste caso o digito verificador será 0, caso contrario o 
 * digito verificador será 11 subtraido do resto da divisão da soma por 11 
 * (11 - soma%11).
 */
public static String digitValidator(String cpf) {
	char[] cpfChars =  cpf.toCharArray();
	int firstDigitSum = 0; 
	int secondDigitSum = 0;
	for (int i = 0; i<9; i++) {
		firstDigitSum += (10-i) * Character.getNumericValue(cpfChars[i]);
		secondDigitSum += (11-i) * Character.getNumericValue(cpfChars[i]);
	}
	//firstDigitSum%11 é o mesmo que "Resto da divisão de firstDigitSum por 11"
	int  digit1 = ((firstDigitSum % 11) > 1) ? 11 - (firstDigitSum % 11) : 0;
	int  digit2 = ((secondDigitSum % 11) > 1) ? 11- (secondDigitSum % 11) : 0;
	return "" + digit1 + digit2;
}
M

Somente como ressalva:
Deve-se considerar INVÁLIDO o CPF que contenha todos os dígitos iguais.

Lavieri

marcobiscaro2112:
Somente como ressalva:
Deve-se considerar INVÁLIDO o CPF que contenha todos os dígitos iguais.

se vc validar o digito verificador, vai ver que nenhum CPF com todos os números iguais é valido (salvo o [CPF removido] que o digito verificador é valido)

M

Lavieri:
marcobiscaro2112:
Somente como ressalva:
Deve-se considerar INVÁLIDO o CPF que contenha todos os dígitos iguais.

se vc validar o digito verificador, vai ver que nenhum CPF com todos os números iguais é valido (salvo o [CPF removido] que o digito verificador é valido)


De qualquer maneira é preciso fazer a verificação justamente por causa do [CPF removido]

nextuser

https://brazilutils.dev.java.net/

projeto para validar dados brasileiros como cpf…

BrazilUtils it´s a API composed with a set of utility tools for a java programmer, like cpf and cnpj validation and much others usual routines ,being a helpful tool to programmer to improve development desktop system and web systems too.It´s a great enhance in productivity of brazilian programmers and everyone who employ brazilian(and SI) metric and official document ID numbers in your programs.

Lavieri

nextuser:
https://brazilutils.dev.java.net/

projeto para validar dados brasileiros como cpf…

BrazilUtils it´s a API composed with a set of utility tools for a java programmer, like cpf and cnpj validation and much others usual routines ,being a helpful tool to programmer to improve development desktop system and web systems too.It´s a great enhance in productivity of brazilian programmers and everyone who employ brazilian(and SI) metric and official document ID numbers in your programs.

eu tinha ouvido falar antes, desse projeto, mais não tinha visto os source e tal…

olhei, e pra ser sincero, não me agradou muito não… algumas abordagem lá não parecem bem legais, como o CpfCnpj juntos, e outras coisas… esta me servido bem o projeto, pois tem muita informação concentrada, mais ele não cobre as exceções

T

Lavieri:

olhei, e pra ser sincero, não me agradou muito não… algumas abordagem lá não parecem bem legais, como o CpfCnpj juntos, e outras coisas… esta me servido bem o projeto, pois tem muita informação concentrada, mais ele não cobre as exceções

E é para isso que serve o open-source.

Se você puder dizer quais são as tais exceções e fazer a correção, mande-a para o pessoal do BrazilUtils em vez de ficar reclamando (mania de reclamar, até das coisas que são de graça).

nextuser

thingol:
Lavieri:

olhei, e pra ser sincero, não me agradou muito não… algumas abordagem lá não parecem bem legais, como o CpfCnpj juntos, e outras coisas… esta me servido bem o projeto, pois tem muita informação concentrada, mais ele não cobre as exceções

E é para isso que serve o open-source.

Se você puder dizer quais são as tais exceções e fazer a correção, mande-a para o pessoal do BrazilUtils em vez de ficar reclamando (mania de reclamar, até das coisas que são de graça).

boa

Lavieri

thingol:
Lavieri:

olhei, e pra ser sincero, não me agradou muito não… algumas abordagem lá não parecem bem legais, como o CpfCnpj juntos, e outras coisas… esta me servido bem o projeto, pois tem muita informação concentrada, mais ele não cobre as exceções

E é para isso que serve o open-source.

Se você puder dizer quais são as tais exceções e fazer a correção, mande-a para o pessoal do BrazilUtils em vez de ficar reclamando (mania de reclamar, até das coisas que são de graça).

não é uma reclamação, é uma opinião, existem diferença entre as duas coisas.

aqui no forum, em outros posts, onde busquei soluções para os meus problemas de validações brasileiras, sempre coloquei expostos, as soluções que encontrei assim como as fontes de dados.

As exceções são por exemplo, os CNPJ com número base

11.111.111/XXXX-XX, onde XXXX-XX pode ser qualquer terminação é um CNPJ invalido
22.222.222/XXXX-XX, onde XXXX-XX pode ser qualquer terminação é um CNPJ invalido

99.999.999/XXXX-XX, onde XXXX-XX pode ser qualquer terminação é um CNPJ invalido

por exemplo 11.111.111/0001-91, apesar do digito verificador estar correto o CNPJ é invalido.

os CNPJ com a seguinte configuração
00.0XX.XXX/YYYY-ZZ, onde XX.XXX != 00.000 não pode ter YYYY maior que 0300 pois nesse caso será invalido.

o CPNJ XX.XXX.XXX/0000-XX é invalido, pois o que vem apos a barra representa o número da filial, e não existe filial zero

obs.: cnpj com número basico 00.000.000/XXXX-XX é valido e é o CNPJ do Banco do Brasil SA

essas são algumas que me lembro… fora isso é algumas coisas que vi no proprio código.

Não estou reclamando do brazilutil, apenas coloquei minha opinião, não tenho como reclamar, ate pq não utilizo a API diretamente, portanto não tenho reclamações pois nem sei c há bugs ou outras coisas, nem estou aqui pedindo Features e etc, so falei o que pensei ao ler os códigos e ver como ele funcionava

mesmo assim agradeço bastante a eles, principalmente porque consegui boa parte da iformação que precisava lá

dugbuddy
<blockquote>for (int i = 0; strCpf.charAt(i) != strCpf.charAt(i + 1), i < strCpf.length() - 1; i++) {

if (i != strCpf.length()) {

verifica = true;

}

}
if (!verifica) {
      return false;
  }
  else {//...</blockquote>

Ola Claudneto,

Estava vendo o seu codigo, e quando implementei… ele deu erro no charAt… Quando faço i < strCpf.length() - 1, ele não aceita int.
Como faço para resolver isso?

obrigado

F

Existem empresas que fornecem a ponte para a consulta diretamente no site da receita para informar se o CNPJ ou CPF é valido ou não e ainda se está ativo na Receita Federal ou não.

Na empresa que trabalho existe uma empresa prestando este tipo de serviço. O sistema que fiz em java acessa diretamente o webservice deles, que por sua vez faz a consulta. É bem tranquilo, vc paga por consulta efetuada e é muito barato.

Estou tentando desenvolver um deste em java.

71C4700

Veja este link pra ve se ajuda…

http://www.guj.com.br/posts/list/68470.java

F

Na verdade esses algoritmos só checam se o algoritmo do CPF é válido…

Ou seja, é bem inútil para validar um CPF de verdade…

Um algoritmo para validar um CPF real deve estar associado com uma pessoa real… e neste caso só com a receita federal… mais cedo ou mais tarde(se é que já não existe) vai ter um Web-Service da receita para todo mundo consultar…

Mas o mesmo deveria ter algum certificado digital para comprovar residência e tal…

F

Na verdade esses algoritmos só checam se o algoritmo do CPF é válido…

Ou seja, é bem inútil para validar um CPF de verdade…

Um algoritmo para validar um CPF real deve estar associado com uma pessoa real… e neste caso só com a receita federal… mais cedo ou mais tarde(se é que já não existe) vai ter um Web-Service da receita para todo mundo consultar…

Mas o mesmo deveria ter algum certificado digital para comprovar residência e tal…

Criado 26 de setembro de 2008
Ultima resposta 7 de jul. de 2010
Respostas 30
Participantes 15