Silvio Tenfen Junior

Validação de CPF/CNPJ no Magento

Em lojas virtuais, é extremamente necessário solicitar dados do CPF/CNPJ ao usuário para geração de notas fiscais. Por padrão, ele vem desativado no Magento. Para habilitá-lo, vá no Painel Administrativo em Sistema -> Configurações. No menu ao lado, vá na categoria Clientes, selecione Configurações. Na página, na aba Opções de Nome e Endereço, na caixa de combinação Exibir CPF/CNPJ, selecione Obrigatório.

Outra situação importante é que o Magento não faz a validação do CPF/CNPJ permitindo que dados incorretos sejam cadastrados. Para isso, precisamos configurar a validação do CPF/CNPJ. Verifique o arquivo em app/design/frontend/<default>/<default>/template/customer/widget/taxvat.phtml. Considerando que <default>/<default> seja a localização do seu template como default/modern ou default/default.

Cadê a Pasta Customer?

Talvez você não encontre a pasta customer. Nesse caso, teremos que criar essa pasta junto com a pasta widget e o arquivo taxvat.phtml. O conteúdo do arquivo taxvat.phtml deve ser o mesmo de app/design/frontend/base/default/template/customer/widget/taxvat.phtml.

Prosseguindo

No final do arquivo adicione o seguinte código:

<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>

Agora, abra o arquivo js/prototype/validation.js. Na última linha do arquivo após “});”, adicione:

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 );
}

Ainda neste mesmo arquivo procure por:

['validate-ssn', 'Please enter a valid social security number. For example 123-45-6789.', function(v) {
return Validation.get('IsEmpty').test(v) || /^\d{3}-?\d{2}-?\d{4}$/.test(v);
}],

Após esse trecho adicione:

['validar_cpf', 'O CPF ou CNPJ informado e invalido.', function(v) {
return validaCPF(v,0);
}],

E pronto!

Fonte: danielbarbosa09 em http://www.magentocommerce.com/boards/viewthread/221817/

Sair da versão mobile