Como hoje precisei acertar um problema que estava tendo com a Validação de CPF/CNPJ de um cliente, resolvi postar aqui meu primeiro tutorial.
Então vamos lá!
Para não precisar adicionar um novo campo, vamos utilizar o campo TAXVAT que já vem no cadastro de Cliente.
Então no arquivo: app/design/frontend/<<<default>>>/<<<default>>>/layout/page.xml
Adicione a linha abaixo:
<action method="addJs"><script><<<suaempresa>>>/validacao.js</script></action>
No final do arquivo: app/design/frontend/<<<default>>>/<<<default>>>/template/customer/widget/taxvat.phtml
Adicione:
<script type="text/javascript">
//<![CDATA[
// Adicionar classe de validação de cpf e cnpj ao Taxvat
$('<?php echo $this->getFieldId('taxvat'); ?>').addClassName('validar_cpf');
Validation.add('validar_cpf', 'O CPF ou CNPJ informado \xE9 invalido', function(v){return validaCPF(v,0);});
//]]>
</script>
Crie um arquivo em: magento/js/<<<suaempresa>>>/validacao.js
Com o seguinte conteúdo:
function validaCPF(cpf,pType){
var cpf_filtrado = "", valor_1 = " ", valor_2 = " ", ch = "";
var valido = false;
for (i = 0; i < cpf.length; i++){
ch = cpf.substring(i, i + 1);
if (ch >= "0" && ch <= "9"){
cpf_filtrado = cpf_filtrado.toString() + ch.toString()
valor_1 = valor_2;
valor_2 = ch;
}
if ((valor_1 != " ") && (!valido)) valido = !(valor_1 == valor_2);
}
if (!valido) cpf_filtrado = "12345678912";
if (cpf_filtrado.length < 11){
for (i = 1; i <= (11 - cpf_filtrado.length); i++){cpf_filtrado = "0" + cpf_filtrado;}
}
if(pType <= 1){
if ( ( cpf_filtrado.substring(9,11) == checkCPF( cpf_filtrado.substring(0,9) ) ) && ( cpf_filtrado.substring(11,12)=="") ){return true;}
}
if((pType == 2) || (pType == 0)){
if (cpf_filtrado.length >= 14){
if ( cpf_filtrado.substring(12,14) == checkCNPJ( cpf_filtrado.substring(0,12) ) ){ return true;}
}
}
return false;
}
function checkCNPJ(vCNPJ){
var mControle = "";
var aTabCNPJ = new Array(5,4,3,2,9,8,7,6,5,4,3,2);
for (i = 1 ; i <= 2 ; i++){
mSoma = 0;
for (j = 0 ; j < vCNPJ.length ; j++)
mSoma = mSoma + (vCNPJ.substring(j,j+1) * aTabCNPJ[j]);
if (i == 2 ) mSoma = mSoma + ( 2 * mDigito );
mDigito = ( mSoma * 10 ) % 11;
if (mDigito == 10 ) mDigito = 0;
mControle1 = mControle ;
mControle = mDigito;
aTabCNPJ = new Array(6,5,4,3,2,9,8,7,6,5,4,3);
}
return( (mControle1 * 10) + mControle );
}
function checkCPF(vCPF){
var mControle = ""
var mContIni = 2, mContFim = 10, mDigito = 0;
for (j = 1 ; j <= 2 ; j++){
mSoma = 0;
for (i = mContIni ; i <= mContFim ; i++)
mSoma = mSoma + (vCPF.substring((i-j-1),(i-j)) * (mContFim + 1 + j - i));
if (j == 2 ) mSoma = mSoma + ( 2 * mDigito );
mDigito = ( mSoma * 10 ) % 11;
if (mDigito == 10) mDigito = 0;
mControle1 = mControle;
mControle = mDigito;
mContIni = 3;
mContFim = 11;
}
return( (mControle1 * 10) + mControle );
}
Qualquer dúvida é só avisar.
abraço
Pablo Tischer
Comentários
Fiz tudo como mostra acima estou usando a versão Magento: 1.3.2.4, mas não valida o campo caso tenha digitado CPF invalido.
Não dá nenhum erro simplesmente envia o form
Obrigado
Ja fiz e refiz isso ai milhares de vezes e nunca tive problema.
Qualquer dúvida, poste no forum.
Eu fiz e funcionou direitinho. Obrigado Mestre!
Qualquer dúvida é só avisar.
A validação deu certo no template default, mas como mudei para o modern, não consegue validar. Fiz todo o processo para a pasta modern conforme o tutorial acima.
Outra dica, é possÃvel ele checar também no banco se o cnpf ou cnpj já existe?
Obrigado
o que fazer agora?
dúvida a versão que estou usando é a mais recente.. ela é melhor?
obrigado
Para quem não quer o CNPJ obrigatório como eu, insira acima deste trecho:
if (cpf_filtrado.length >= 14){ ...
...o seguinte código:
if (cpf_filtrado.substring(0,12) == "12345678912") { return true; }
...pois o código como está aqui neste tutorial, acusa o CNPJ vazio como inválido., impossibilitand o dar continuidade no cadastro sem que você o preencha com um CNPJ válido.
PS.: Parabéns!
Abs
Porem nao funciona, a tela fica inteira branca.
Então como eu faria?
Abs
Vi uma dica no forum acima mas nao conseguir entender
Eu só fiz diferente no arquivo: taxvat.phtml onde ao invés de colocar a classe com javascript eu coloquei no código mesmo....
Mas eu entendi o porque você fez isso por javascript, porque fica mais fácil de entender mesmo!
Parabéns!
obg!
fiz tdas as mudanças de código na pasta "base" pois nao possuo os mesmos arquivos em "default".
Contudo ao clicar no link "Cadastrar" nada acontece!
Alguem passou por esse problema?
Abraço
alvesbarbosa.wordpress.com/
Funcionou perfeito...
Abs e sucesso à todos
já tentei de tudo quanto é jeito.
Já até desinstalei e instalei o magento.
Ele nao valida nada...passa direto qualquer CPF
Por favor, ajude-me!
Obrigado
RSS feed para comentários a este post.