Pra fechar o forum , eu consegui com a contagem e os numeros.
Tem 3 afazeres: uma classe , o input para validar e o config jsf
Classe para validar as contagens dos digitos
package br.com.duxsolutions.validadores;
import java.util.InputMismatchException;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import br.com.duxsolutions.bean.ClienteBean;
public class CpfValidator implements Validator {
@Override
public void validate(FacesContext arg0, UIComponent arg1, Object valorTela)
throws ValidatorException {
valorTela = remove(String.valueOf(valorTela));
if( validaCPF(String.valueOf(valorTela)) != true){
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("CPF INVÁLIDO");
throw new ValidatorException(message);
}
}
private static boolean validaCPF(String CPF){
if (CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]") ||
CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]") ||
CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]") ||
CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]") ||
CPF.equals("[telefone removido]") || CPF.equals("[telefone removido]") ||
CPF.length() != 11 || CPF.length() == 14 ){
return(false);
}else{
char dig10, dig11;
int sm, i, r, num, peso;
// "try" - protege o codigo para eventuais erros de conversao de tipo (int)
try {
// Calculo do 1o. Digito Verificador
sm = 0;
peso = 10;
for (i=0; i<9; i++) {
// converte o i-esimo caractere do CPF em um numero:
// por exemplo, transforma o caractere '0' no inteiro 0
// (48 eh a posicao de '0' na tabela ASCII)
num = (int)(CPF.charAt(i) - 48);
sm = sm + (num * peso);
peso = peso - 1;
}
r = 11 - (sm % 11);
if ((r == 10) || (r == 11))
dig10 = '0';
else dig10 = (char)(r + 48); // converte no respectivo caractere numerico
// Calculo do 2o. Digito Verificador
sm = 0;
peso = 11;
for(i=0; i<10; i++) {
num = (int)(CPF.charAt(i) - 48);
sm = sm + (num * peso);
peso = peso - 1;
}
r = 11 - (sm % 11);
if ((r == 10) || (r == 11))
dig11 = '0';
else dig11 = (char)(r + 48);
// Verifica se os digitos calculados conferem com os digitos informados.
if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10))){
return true;
}
else {
return(false);
}
} catch (InputMismatchException erro) {
return(false);
}
}
}
public static String remove(String CPF){
CPF = CPF.replace(".", "");
CPF = CPF.replace("-", "");
return CPF;
}
}
Configuração no Faces-Config
<validator>
<validator-id>CpfValidator</validator-id>
<validator-class>br.com.duxsolutions.validadores.CpfValidator</validator-class>
</validator>
<validator>
<validator-id>CnpjValidator</validator-id>
<validator-class>br.com.duxsolutions.validadores.CnpjValidator</validator-class>
</validator>
por ultimo a validacao no XHTML ,
<p:inputMask
id="cliente-cpf"
value="#{clienteBean.cliente.cpf}"
mask = "[CPF removido]"
size="16">
<f:validator validatorId="CpfValidator"/>
<p:ajax event="blur" update="cadastroCliente" listener="#{clienteBean.verificaCpfExistente}" />
</p:inputMask>