Verificar letra no meio de números

Bom dia.

Estou buscando CNPJ’s em uma base de dados para poder validar cada uma delas, e salvar em log as inválidas e as válidas.
Até ai tudo bem. Eu só estou com um problinha.
Existem alguns CNPJ’s que tem Letras no meio dos números.

Gostaria de saber como faço para ler caracter por caracter, e verificar se tem alguma letra.
Porque ai se eu achar alguma letra, já gravo em log inválido.

Algum poderia me dar uma ajuda?
obrigado.

O string tem o método charAt.

E a classe Character tem o método isDigit.

Um CNPJ é algo que é assim:

03.847.655/0001-98

Portanto, você poderia usar a seguinte expressão regular:

“\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}”

para verificar se ele segue o padrão.

poderiam me dar um exemplo de como é o seu uso ?
tanto do isDigit quanto dos \ ?

Só para tomar como base.

Vou te quebrar o galho:

Classe CNPJ, possui o metodo isCNPJ que verifica se o cnpj eh valido ou nao…

Voce pode informar qualquer porcaria pra funcao isCNPJ, pode mandar o cnpj com formatacao, sem formatacao, qualquer coisa mesmo, ate uma string que nao tem nada a ver, e ele vai retornar true apenas se o cnpj for valido.

[]s

Kemper

public abstract class CNPJ {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    public static boolean isCNPJ(String str_cnpj) {
        int soma = 0, dig;

        if (str_cnpj == null) {
            return false;
        }

        str_cnpj = Formatador.getNumeros(str_cnpj);
        str_cnpj = Formatador.formata(str_cnpj, "##############");

        if (str_cnpj.length() != 14) {
            return false;
        }

        String cnpj_calc = str_cnpj.substring(0, 12);

        char[] chr_cnpj = str_cnpj.toCharArray();

        /* Primeira parte */
        for (int i = 0; i < 4; i++) {
            if (chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9) {
                soma += (chr_cnpj[i] - 48) * (6 - (i + 1));
            }
        }
        for (int i = 0; i < 8; i++) {
            if (chr_cnpj[i + 4] - 48 >= 0 && chr_cnpj[i + 4] - 48 <= 9) {
                soma += (chr_cnpj[i + 4] - 48) * (10 - (i + 1));
            }
        }
        dig = 11 - (soma % 11);

        cnpj_calc += (dig == 10 || dig == 11) ? "0" : Integer.toString(dig);

        /* Segunda parte */
        soma = 0;
        for (int i = 0; i < 5; i++) {
            if (chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9) {
                soma += (chr_cnpj[i] - 48) * (7 - (i + 1));
            }
        }
        for (int i = 0; i < 8; i++) {
            if (chr_cnpj[i + 5] - 48 >= 0 && chr_cnpj[i + 5] - 48 <= 9) {
                soma += (chr_cnpj[i + 5] - 48) * (10 - (i + 1));
            }
        }
        dig = 11 - (soma % 11);
        cnpj_calc += (dig == 10 || dig == 11) ? "0" : Integer.toString(dig);

        return str_cnpj.equals(cnpj_calc);
    }
}

Classe Formatador possui metodos estaticos utilizados pela classe acima:


public class Formatador {

    public static String getNumeros(String valor) {
        String dado = "";
        // remove caracteres nao numericos
        for (int i = 0; i < valor.length(); i++) {
            char c = valor.charAt(i);
            if (Character.isDigit(c)) {
                dado += c;
            }
        }
        return dado;
    }

    public static String formata(String valor, String mascara) {

        String dado = getNumeros(valor);

        int indMascara = mascara.length();
        int indCampo = dado.length();
        boolean somenteNumeros = true;

        for (int i = 0; i < mascara.length(); i++) {
            if (mascara.charAt(i) != '#') {
                somenteNumeros = false;
            }
        }

        if (somenteNumeros) {
            for (; indCampo > 0 && indMascara > 0;) {
                if (mascara.charAt(--indMascara) == '#') {
                    indCampo--;
                }
            }
        } else {
            for (; indCampo > 0 || indMascara > 0;) {
                if (mascara.charAt(--indMascara) == '#') {
                    indCampo--;
                }
            }
        }

        String saida = "";
        for (; indMascara < mascara.length(); indMascara++) {
            saida += ((mascara.charAt(indMascara) == '#') ? dado.charAt(indCampo++) : mascara.charAt(indMascara));
        }

        return saida;
    }

}

Se quiser pode ate mesmo colocar estas funcoes estaticas dentro da propia classse CNPJ, eu uso separado pq tenho outras classes que utilizam as mesmas funcoes.

[]s

Kemper

Brigado cara. valeu mesmo.