Validar CNPJ e CPF


#1

Ola pessoal!

Alguém poderia me informar qual é o procedimento para validar campos no adempiere. Estou precisando validar os campos de CNPJ e CPF.

Atenciosamente,
Controle Facil


#2

utilize o ModelValidator, se vc logar no Client que vc deseja fazer a Validação e for na Janela “Cliente”, tem um campo Model Validation Class, vc coloca assim:

[quote:06abd]
org.kenos.model.BPartnerValidator
[/quote:06abd]
o ModelValidator é executando no before e after Save e tbm no before e after complete

os métodos modeChange são do SAVE
os métodos docValidate são do COMPLETE

qq dúvida coloque aqui que tentaremos ajudar.

segue classes que estou utilizando: Vc terá que fazer algumas alterações em relação aos Campos, pois não sei que nomes vc utilizou ou aonde vc criou os campos

Validator - OBS é o Validator para Compiere, talvez vc tenha que comentar alguns métodos que não estão implementados no Adempiere

[code:06abd]
package org.kenos.model;

import java.util.*;

import org.compiere.model.;
import org.compiere.util.
;

/**

  • Kenos Validator Business Partner

  • Validação de CNPJ e CPF

  • @author Mario Grigioni

  • @version $Id: BPartnerValidator.java,2007/04/18 10:51:00 mgrigioni Exp $
    /
    public class BPartnerValidator extends DocBR implements ModelValidator
    {
    /
    *

    • Constructor.
    • The class is instanciated when logging in and client is selected/known
      */
      public BPartnerValidator ()
      {
      super ();
      } // KenosValidator

    /** Logger /
    private static CLogger log = CLogger.getCLogger(BPartnerValidator.class);
    /
    * Client */
    private int m_AD_Client_ID = -1;

    /**

    • Initialize Validation

    • @param engine validation engine

    • @param client client
      */
      public void initialize (ModelValidationEngine engine, MClient client)
      {
      m_AD_Client_ID = client.getAD_Client_ID();

      log.info(client.toString());

      // ModelChange
      engine.addModelChange(“C_BPartner”, this);
      } // initialize

    /**

    • Get Client to be monitored
    • @return AD_Client_ID client
      */
      public int getAD_Client_ID()
      {
      return m_AD_Client_ID;
      } // getAD_Client_ID

    /**

    • User Login.
    • Called when preferences are set
    • @param AD_Org_ID org
    • @param AD_Role_ID role
    • @param AD_User_ID user
    • @return error message or null
      */
      public String login (int AD_Org_ID, int AD_Role_ID, int AD_User_ID)
      {
      log.info(“AD_User_ID=” + AD_User_ID);
      return null;
      } // login

    /**

    • Model Change of a monitored Table.

    • Called after PO.beforeSave/PO.beforeDelete

    • when you called addModelChange for the table

    • @param po persistent object

    • @param type TYPE_

    • @return error message or null

    • @exception Exception if the recipient wishes the change to be not accept.
      */
      public String modelChange (PO po, int type) throws Exception
      {
      //Executa quando um BPartner é salvo ou atualizado
      if (po.get_TableName().equalsIgnoreCase(“C_BPartner”) && (type == CHANGETYPE_CHANGE || type == CHANGETYPE_NEW))
      {
      MBPartner bp = (MBPartner)po;

      // Se não foi Validado e é Brasileiro
      if (!bp.isBPTypeBRIsValid() && bp.getAD_Language().equalsIgnoreCase("pt_BR")) {
      
      	// Se o Idioma, for Português verifica
      	if (bp.getAD_Language().equalsIgnoreCase("pt_BR")){
      			
      		// Se for pessoa física, verifica CPF
      		if (bp.getBPTypeBR().equalsIgnoreCase("PF")){
      			String CPF = bp.getCPF();
      			if (!validaCPF(CPF)){
      				return "CPF Invalido";
      			}
      			if (!consultaCPF(CPF)){
      				return "CPF Duplicado";
      			}
      			
      			
      			
      		}
      		// Se for pessoa jurídica, verifica CNPJ
      		else if (bp.getBPTypeBR().equalsIgnoreCase("PJ")){
      			String CNPJ = bp.getCNPJ();
      			if (!validaCNPJ(CNPJ)){
      				return "CNPJ Invalido";
      			}
      			if (!consultaCNPJ(CNPJ)){
      				return "CNPJ Duplicado";
      			}
      			
      		}
      	
      	}
      
      	bp.setBPTypeBRIsValid(true);
      
      }
      

      }

      log.info(po.toString()+" | TYPE:"+type );
      return null;
      } // modelChange

    /**

    • Validate Document.
    • Called as first step of DocAction.prepareIt
    • when you called addDocValidate for the table.
    • Note that totals, etc. may not be correct.
    • @param po persistent object
    • @param timing see TIMING_ constants
    • @return error message or null
      */
      public String docValidate (PO po, int timing)
      {
      return null;
      } // docValidate

    /**

    • Update Info Window Columns.
      • add new Columns
      • remove columns
      • change dispay sequence
    • @param columns array of columns
    • @param sqlFrom from clause, can be modified
    • @param sqlOrder order by clause, can me modified
    • @return true if you updated columns, sequence or sql From clause
      /
      public boolean updateInfoColumns (ArrayList<Info_Column> columns,
      StringBuffer sqlFrom, StringBuffer sqlOrder)
      {
      /
      * *
      int AD_Role_ID = Env.getAD_Role_ID (Env.getCtx()); // Can be Role/User specific
      String from = sqlFrom.toString();
      if (from.startsWith (“M_Product”))
      {
      columns.add (new Info_Column(“Header”, “‘sql’”, String.class).seq(35));
      return true;
      }/** */
      return false;
      } // updateInfoColumns

    /**

    • String Representation
    • @return info
      */
      public String toString ()
      {
      StringBuffer sb = new StringBuffer (“KenosValidator”);
      return sb.toString ();
      } // toString

}
[/code:06abd]

Classe da Validação

[code:06abd]
package org.kenos.model;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.logging.Level;

import org.compiere.util.CLogger;
import org.compiere.util.DB;

/**

  • Kenos DocBR

  • @author Mario Grigioni

  • @version $Id: DocBR.java,2007/04/16 08:34:00 mgrigioni Exp $
    */
    public class DocBR{

    protected static CLogger log = CLogger.getCLogger(DocBR.class);

    public DocBR(){}

    // Método para validar CPF
    // @param - String CPF
    public static boolean validaCPF(String xCPF){
    int d1,d4,xx,nCount,resto,digito1,digito2;
    String Check;
    String Separadores = “/-.”;
    d1 = 0; d4 = 0; xx = 1;

    if (xCPF.equals("000.000.000-00") ||
    	xCPF.equals("111.111.111-11") ||
    	xCPF.equals("222.222.222-22") ||
    	xCPF.equals("333.333.333-33") ||
    	xCPF.equals("444.444.444-44") ||
    	xCPF.equals("555.555.555-55") ||
    	xCPF.equals("666.666.666-66") ||
    	xCPF.equals("777.777.777-77") ||
    	xCPF.equals("888.888.888-88") ||
    	xCPF.equals("999.999.999-99"))
    {
    	return false;
    }
    
    for (nCount = 0; nCount < xCPF.length() -2; nCount++) {
    	String s_aux = xCPF.substring(nCount, nCount+1);
    	if (Separadores.indexOf(s_aux) == -1) {
    		d1 = d1 + ( 11 - xx ) * Integer.valueOf (s_aux).intValue();
    		d4 = d4 + ( 12 - xx ) * Integer.valueOf (s_aux).intValue();
    		xx++;
    	}
    }
    
    resto = (d1 % 11);
    
    if (resto < 2) {
    	digito1 = 0;
    }
    else {
    	digito1 = 11 - resto;
    }
    
    d4 = d4 + 2 * digito1;
    resto = (d4 % 11);
    
    if (resto < 2) {
    	digito2 = 0;
    }
    else {
    	digito2 = 11 - resto;
    }
    
    Check = String.valueOf(digito1) + String.valueOf(digito2);
    String s_aux2 = xCPF.substring (xCPF.length()-2, xCPF.length());
    
    if (s_aux2.compareTo (Check) != 0){
    	return false;
    }
    return true;
    

    } // validaCPF

    // Método para validar CNPJ
    // @param - String CNPJ
    public static boolean validaCNPJ(String xCNPJ) {
    int d1,d4,xx,nCount,fator,resto,digito1,digito2;
    String Check, s_aux;
    String Separadores = “/-.”;
    d1 = 0;
    d4 = 0;
    xx = 0;

    for (nCount = 0; nCount < xCNPJ.length()-2; nCount++) {
      s_aux = xCNPJ.substring (nCount, nCount+1);
      if (Separadores.indexOf(s_aux) == -1) {
    	  if (xx < 4) {
    		  fator = 5 - xx;
          }
          else {
              fator = 13 - xx;
          }
    	  
          d1 = d1 + Integer.valueOf (s_aux).intValue() * fator;
          
          if (xx < 5) {
              fator = 6 - xx;
          }
          else {
              fator = 14 - xx;
          }
          
          d4 += Integer.valueOf (s_aux).intValue() * fator;
          xx++;
      }
    }
    
    resto = (d1 % 11);
    
    if (resto < 2) {
      digito1 = 0;
    }
    else{
      digito1 = 11 - resto;
    }
    
    d4 = d4 + 2 * digito1;
    resto = (d4 % 11);
    
    if (resto < 2) {
      digito2 = 0;
    }
    else {
      digito2 = 11 - resto;
    }
    
    Check = String.valueOf(digito1) + String.valueOf(digito2);
    
    if (Check.compareTo(xCNPJ.substring(xCNPJ.length()-2, xCNPJ.length() )) !=0) {
      return false;
    }
    return true;
    

    } //validaCPNJ

    // Método para consultar duplicidade de CNPJ
    // @param - String CNPJ
    public boolean consultaCNPJ(String xCNPJ) {
    int iCNPJ = 0;
    String sql = “select count(CNPJ) from C_BPartner where CNPJ = ?”;
    PreparedStatement pstmt = null;
    try
    {
    pstmt = DB.prepareStatement (sql, null);
    pstmt.setString (1, xCNPJ);
    ResultSet rs = pstmt.executeQuery ();
    if (rs.next ())
    {
    iCNPJ = rs.getInt(1);
    }
    rs.close ();
    pstmt.close ();
    pstmt = null;
    }
    catch (Exception e)
    {
    log.log(Level.SEVERE, “”, e);
    }
    try
    {
    if (pstmt != null)
    pstmt.close ();
    pstmt = null;
    }
    catch (Exception e)
    {
    pstmt = null;
    }
    if (iCNPJ > 0)
    return false;
    else
    return true;
    } // consultaCNPJ

    // Método para consultar duplicidade de CPF
    // @param - String CNPJ
    public boolean consultaCPF(String xCPF) {
    int iCPF = 0;
    String sql = “select count(CPF) from C_BPartner where CPF = ?”;
    PreparedStatement pstmt = null;
    try
    {
    pstmt = DB.prepareStatement (sql, null);
    pstmt.setString (1, xCPF);
    ResultSet rs = pstmt.executeQuery ();
    if (rs.next ())
    {
    iCPF = rs.getInt(1);
    }
    rs.close ();
    pstmt.close ();
    pstmt = null;
    }
    catch (Exception e)
    {
    log.log(Level.SEVERE, “”, e);
    }
    try
    {
    if (pstmt != null)
    pstmt.close ();
    pstmt = null;
    }
    catch (Exception e)
    {
    pstmt = null;
    }
    if (iCPF > 0)
    return false;
    else
    return true;
    }

}
[/code:06abd]