Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina



Luiz Henrique de Angeli

luizdeangeli@gmail.com


Como validar CNPJ, CPF e PIS usando Validator

terça-feira, 1 de setembro de 2009



Galera, Abaixo um exemplo de como validar CNPJ, CPF e PIS usando Validator, desenvolvida pelo Anderson Macente

"Neste post irei demonstrar como validar CNPJ, CPF e PIS em FLEX utilizando a classe Validator. Aproveitando o embalo segue também como colocar mascara nos campos. O componente utilizado para máscara foi retirado desse link

Os arquivos ".as" devem ser criados na pasta componentes.
"
Anderson Macente

CpfValidator.as


package componentes
{
 import mx.validators.ValidationResult;
 import mx.validators.Validator;
 
 public class CpfValidator extends Validator
 {
  public function CpfValidator()
  {
    super();
  }

  override protected function doValidation(value:Object):Array 
  {
          var results:Array = super.doValidation(value.text);
          var digito:Array = new Array(); // array para os dígitos do CPF.
   var aux:Number= 0;          
   var posicao:Number;
   var i:Number;
   var soma:Number;
   var dv:Number;
   var dvInformado:Number;
   var CPF:String = value.text;
   
   // Retira os dígitos formatadores de CPF '.' e '-', caso existam.
   CPF.replace(".", "");
   CPF.replace("-", "");

    //verifica CPFs manjados
    switch (CPF) 
    {   
      case '0':   
      case '00':   
      case '000':   
      case '0000':   
      case '00000':   
      case '000000':   
      case '0000000':   
      case '00000000':   
      case '000000000':   
      case '0000000000':   
      case '00000000000':   
      case '11111111111':   
      case '22222222222':   
      case '33333333333':   
      case '44444444444':   
      case '55555555555':   
      case '66666666666':   
      case '77777777777':   
      case '88888888888':   
      case '99999999999':    
       results.push(new ValidationResult(true, null, "Erro","Número do CPF inválido!"));
       return results;
      break;
    }

    // Início da validação do CPF.
    /* Retira do número informado os dois últimos dígitos */

    dvInformado = parseInt(CPF.substr(9,2));

    /* Desmembra o número do CPF no array digito */ 
    for (i=0; i<= 8; i++)
    {
      digito[i] = CPF.substr(i,1);
    }
    
    /* Calcula o valor do 10o. digito de verificação */
    posicao = 10;
    soma = 0;
    
   for (i=0; i <= 8; i++)   
    {   
     soma = soma + digito[i] * posicao;   
     posicao--;   
   }

    digito[9] = soma % 11;
 
    if (digito[9] < 2)
    {
      digito[9] = 0;
    } else {
      digito[9] = 11 - digito[9];
    }

    /* Calcula o valor do 11o. digito de verificação */
   posicao = 11;
   soma = 0;
    
    for (i=0; i <= 9; i++)
    {
      soma = soma + digito[i] * posicao;
      posicao--;
    }

    digito[10] = soma % 11;
    
    if (digito[10] < 2)
    {
      digito[10] = 0;
    } else {
      digito[10] = 11 - digito[10];
    }
    
    dv = digito[9] * 10 + digito[10];
    
    /* Verifica se o DV calculado é igual ao informado */    
    if(dv != dvInformado)
    {
       results.push(new ValidationResult(true, null, "Erro","Número do CPF inválido!"));
    }
    
         return results;

     }  

     override protected function getValueFromSource():Object
     {

         var value:Object = {};
         value.text = super.getValueFromSource();
         return  value;
     }       

 }
}


CnpjValidator.as

package componentes
{
 import mx.validators.ValidationResult;
 import mx.validators.Validator;

 public class CnpjValidator extends Validator
 {

  public function CnpjValidator()  
  {  
   super();  
  }
  
   override protected function doValidation(value:Object):Array 
   {
       var results:Array = super.doValidation(value.text);
   var a:Array = new Array();
   var b:Number = new Number;
   var i:Number;
   var x:Number;
   var y:Number;
   var c:Array = [6,5,4,3,2,9,8,7,6,5,4,3,2];
   var CNPJ:String = value.text;
   
   // Retira os dígitos formatadores de CNPJ '.' e '-', caso existam.
   CNPJ.replace(".", "");
   CNPJ.replace("-", "");
   CNPJ.replace("/", "");

   //verifica CNPJs manjados

   switch (CNPJ) 
   {   
    case '0':
    case '00':
    case '000':
    case '0000':
    case '00000':
    case '000000':
    case '0000000':
    case '00000000':
    case '000000000':
    case '0000000000':
    case '00000000000':
    case '11111111111':
    case '22222222222':
    case '33333333333':
    case '44444444444':
    case '55555555555':
    case '66666666666':
    case '77777777777':
    case '88888888888':
    case '99999999999':
     results.push(new ValidationResult(true, null, "Erro","Número do CNPJ inválido!"));
     return results;
    break;
   }
   
    for (i=0; i < 12; i++)
    {
      a[i] = CNPJ.charAt(i);
      b += a[i] * c[i+1];
     }
     
    if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
    
    b = 0;
    
    for (y=0; y < 13; y++) 
    {
      b += (a[y] * c[y]);
    }
    
   if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }

    if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13]))
   {
    results.push(new ValidationResult(true, null, "Erro","Número do CNPJ inválido!"));
   }
       
       return results;
   }
   
  override protected function getValueFromSource():Object
   {
   var value:Object = {};
   value.text = super.getValueFromSource();
   return  value;
   }
 }
}



PisValidator.as

package componentes
{
 import mx.validators.ValidationResult;
 import mx.validators.Validator;

 public class PisValidator extends Validator
 {
  public function PisValidator()
  {
    super();
  }
  
  // Define the doValidation() method.
   override protected function doValidation(value:Object):Array 
   {
       var results:Array = super.doValidation(value.text);
       if (value.text != "") 
       {
       //Testa se o número do pis é válido ou não
    var PIS:String = value.text;
    var i:Number;
    var digito:Number=0;
    var total:Number=0;
    var resto:Number=0;
    var pesos:Array = new Array;
    var erro:Boolean = false;
    
    // Retira os dígitos formatadores de PIS '.' e '-', caso existam.
    PIS.replace(".", "");
    PIS.replace("-", "");

      //verifica PIS manjados
      switch (PIS) 
      {
     case '0':
     case '00':
     case '000':
     case '0000':
     case '00000':
     case '000000':
     case '0000000':
     case '00000000':
     case '000000000':
     case '0000000000':
     case '00000000000':
     case '11111111111':
     case '22222222222':
     case '33333333333':
     case '44444444444':
     case '55555555555':
     case '66666666666':
     case '77777777777':
     case '88888888888':
     case '99999999999':
      results.push(new ValidationResult(true, null, "Erro","Número do PIS inválido!"));
      return results;
     break; 
    }
    
    pesos[0] = 3;
    pesos[1] = 2;
    pesos[2] = 9;
    pesos[3] = 8;
    pesos[4] = 7;
    pesos[5] = 6;
    pesos[6] = 5;
    pesos[7] = 4;
    pesos[8] = 3;
    pesos[9] = 2;
    
    for (i=0; i<10; i++)
    {
     total = total + pesos[i] * parseInt(PIS.substr(i,1));
    }
   
      resto = total % 11;
      
      if((11-resto)>9)
        digito =0;
       else
        digito = (11 - resto);

      if(digito != parseInt(PIS.substr(10,1)))
    {
        erro = true;
      }else{
        erro = false;
      }
      
      if(erro)
      {
        results.push(new ValidationResult(true, null, "Erro","Número do PIS inválido!"));
       }
    }     
       
       return results;
   }
   
   override protected function getValueFromSource():Object
   {
          var value:Object = {};
          value.text = super.getValueFromSource();
          return  value;
   }
 }

}


main.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:componentes="componentes.*" >

<!-- Criando componentes utilizando o MaskedTextInput -->
<mx:Form>
 <mx:FormItem label="CPF">
   <componentes:MaskedTextInput id="txiCPF" inputMask="###.###.###-##" width="200" restrict="0-9"  />
 </mx:FormItem>
 <mx:FormItem label="CNPJ">
   <componentes:MaskedTextInput id="txiCNPJ" width="200" inputMask="##.###.###//####-##" maxChars="10" restrict="0-9"/>
 </mx:FormItem>
 <mx:FormItem label="PIS">
   <componentes:MaskedTextInput id="txiPIS" width="200" inputMask="###.#####.##-#" maxChars="10" restrict="0-9"/>
 </mx:FormItem>
</mx:Form>

 <!-- Validator para CPF -->
 <componentes:CpfValidator required="true"
        source="{txiCPF}"
        property="text"
        requiredFieldError="Campo Obrigatório"/>
 
 <!-- Validator para CNPJ -->
 <componentes:CnpjValidator required="true"
        source="{txiCNPJ}"
        property="text"
        requiredFieldError="Campo Obrigatório"
 />
  
 <!-- Validator para PIS -->
 <componentes:PisValidator required="true"
        source="{txiPIS}"
        property="text"
        requiredFieldError="Campo Obrigatório"
 />

</mx:Application>



Download dos Fontes : http://groups.google.com.br/group/flexdev/web/CNPJ_PIS_CPF_Validator.zip

Blog do Anderson Macente : http://andersonmacente.blogspot.com/2009/08/como-validar-cnpj-cpf-e-pis-em-flex.html

1 comentários:

Renato Gonçalves disse...

Cara... evita usar esses case para evitar os casos básicos, isso não é nada elegante... Use expressão regular... Essa expressão verifica se os números são repetidos "[1]{11}|[2]{11}|[3]{11}|[4]{11}|[5]{11}|[6]{11}|[7]{11}|[8]{11}|[9]{11}" ae é só verificar também se o texto possui 11 posições... no CPF etc etc... Flws


Submarino.com.br
Submarino.com.br