Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.lavieri.util.brazil.register;
- import java.math.BigInteger;
- import javax.persistence.AttributeOverride;
- import javax.persistence.Column;
- import javax.persistence.Embeddable;
- import javax.persistence.Embedded;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.Transient;
- import org.lavieri.util.StringUtil;
- /**
- * Um <b><i>Object Value</i></b> que representa o n�mero do CNPJ - <b>C</b>adastro
- * <b>N</b>acional de <b>P</b>essoa <b>J</b>uridica - de uma empresa.
- * <BR>
- * <BR>Este objeto pode representa um componente de uma Entitdade @{@link Entity}
- * usando-se como anota��o de campo a tag @{@link Embedded}.
- * <BR>Por padr�o este
- * � representado na tabela de banco de dados por um campo <tt>unique</tt> String de nome
- * "cnpj" (o campo precisa de apenas 14 digitos) que aceita valores nulos.
- * <BR>
- * <BR>� possivel alterar no nome padrao do campo declarando, assim como os atributos
- * not null e unique no objeto Entidade para o campo {@link Cnpj} cnpj usando a
- * anota��o @{@link AttributeOverride}
- * <BR>
- * <BR>Por Exemplo, uma classe Pedido de cliente, onde � registrado o Cnpj do cliente
- * em um campo de nome "cnpj_cliente" e onde este n�o � <tt>unique</tt> e n�o
- * <tt>null</tt>:
- * <BR>
- * <BR><tt>public class ClientePedido {
- * <br> @{@link Id} @{@link GeneratedValue} private {@link Integer} id;
- * <br> @{@link Embedded}
- * <br> @{@link AttributeOverride}(column=@Column(name="cnpj_cliente",
- * unique=false ,nullable=false),
- * <br> name = "digits")
- * // < - - n�o altere esta parte.
- * <br> {@link Cnpj} cnpjDoCliente;
- * <BR> //...
- * <BR>}</tt>
- * <BR>
- * <BR>Last Revision: 01/14/2009
- * @author Tomaz Lavieri
- * @since Lavieri Brazilian Utilities 1.0
- * @version 1.0
- */
- @Embeddable @AttributeOverride(column=@Column(name="cnpj",unique=true), name = "digits")
- public class Cnpj extends StringDigitsSequence {
- /**
- * Testes usados para valida��o do CNPJ
- * <BR>
- * <BR>Last Revision: 01/14/2009
- * @author Tomaz Lavieri
- * @since Lavieri Brazilian Utilities 1.0
- * @version 1.0
- */
- private enum ValidateCnpj {
- /**
- * Cnpj n�o nulo, cnpj != null.
- */
- NOT_NULL {
- @Override public boolean isValid(Cnpj cnpj) {
- return !cnpj.isNull();
- }
- },
- /**
- * Cnpj ##.###.###/0000-## com ordem n�o zero.
- */
- NOT_ORDER_ZERO {
- @Override public boolean isValid(Cnpj cnpj) {
- return !cnpj.getOrderDigits().equals("0000");
- }
- },
- /**
- * Cnpj 00.0##.###/YYYY-## com pelomenos 3 zeros no inicio, e ordem maior que
- * 300 e que n�o seja o banco do brasil sa (00.000.000/####-##) n�o s�o
- * permitidos.
- */
- NOT_BASE_START_WITH_ZERO_AND_HAS_ORDER_GREATER_300_AND_NOT_BB {
- @Override public boolean isValid(Cnpj cnpj) {
- boolean startWith3zero =
- cnpj.getBaseDigits().substring(0, 3).equals("000");
- boolean isOrderGreater300 =
- Integer.parseInt(cnpj.getOrderDigits()) > 300;
- boolean isNotBancoDoBrasil =
- !cnpj.getBaseDigits().equals("00000000");
- return !(startWith3zero && isOrderGreater300 && isNotBancoDoBrasil);
- }
- },
- /**
- * Cnpj YY.YYY.YYY/####-##, onde Y � um n�mero que se repete, e diferente de
- * zero. Por exemplo 11.111.111/0001-91 � invalido, mesmo o digito verificador
- * estado correto, esta regra s� n�o vale para 00.000.000/####-## que � o CNPJ
- * do banco de brasil sa.
- */
- NOT_BASE_WITH_ONLY_SAME_DIGIT_AND_NOT_BB {
- @Override public boolean isValid(Cnpj cnpj) {
- boolean isNotBancoDoBrasil =
- !cnpj.getBaseDigits().equals("00000000");
- boolean allDigitEquals =
- cnpj.getBaseDigits().matches(cnpj.getBaseDigits().charAt(0)+"{8}");
- return !(isNotBancoDoBrasil && allDigitEquals);
- }
- },
- /**
- * Cnpj com digitios verificadores corretos.
- */
- VALID_DIGITS {
- @Override public boolean isValid(Cnpj cnpj) {
- return VerifierDigits.isValid(cnpj, BASE_LENGTH, FACTOR, COEFICIENTS);
- }
- };
- /**
- * Realiza o teste para o {@link Cnpj} passado no parametro.
- * <BR>
- * <BR>Para validar um {@link Cnpj} � necessario que este seja v�lido para todos
- * os {@link ValidateCnpj}, por�m um {@link Cnpj} ser� inv�lido quando qualquer
- * um dos testes de {@link ValidateCnpj} retorne <tt>false</tt>.
- * @param cnpj {@link Cnpj} a ser testado.
- * @return <tt>true</tt> - caso seja v�lido para este teste. N�o indica que este
- * {@link Cnpj} � valido, para tal � preciso ser valido para todos os
- * {@link ValidateCnpj}
- * <br><tt>false</tt> - caso seja inv�lido para este teste, o que
- * consequentemente invalida o {@link Cnpj}.
- */
- abstract public boolean isValid(Cnpj cnpj);
- }
- /**
- * N�mero de digitos de um CNPJ (excluindo-se os digitos verificadores)
- */
- private static final int BASE_LENGTH = 12;
- /**
- * Pesos para o calculor de dos digitos verificadores do CNPJ.
- */
- private static final IntegerDigitsSequence[] COEFICIENTS = {
- //pesos para o 1� digito verificador
- new IntegerDigitsSequence(new int[]{5,4,3,2,9,8,7,6,5,4,3,2}),
- //pesos para o 2� digito verificador
- new IntegerDigitsSequence(new int[]{6,5,4,3,2,9,8,7,6,5,4,3,2})
- };
- /**
- * Fator de divis�o, usado no calculo dos digitos verificadores.
- */
- private static final int FACTOR = 11; //fator de divis�o para calculo dos digitos
- /**
- * Mascara para a formata��o do CNPJ.
- */
- public static final String MASK = "##.###.###/####-##";
- /**
- * Calcula o digito verificador para o Cnpj que o {@link BigInteger} representa.
- * <BR>O mesmo que:
- * <BR><tt>{@link Cnpj} cnpj = {@link #valueOf(BigInteger)};
- * <BR>{@link #calculateVerifyDigits(Cnpj)};</tt>
- * <BR>
- * <BR>Confira {@link #calculateVerifyDigits(Cnpj)} para informa��es de como o m�todo
- * funciona.
- * @see #valueOf(BigInteger)
- * @see #calculateVerifyDigits(Cnpj)
- * @param cnpj N�mero que representa o cnpj.
- * @return {@link String} contendo os 2 digitos que validam o CNPJ enviado.
- * <br><tt>null</tt> - caso o parametro enviado seja nulo.
- */
- public static String calculateVerifyDigits(BigInteger cnpj) {
- return calculateVerifyDigits(valueOf(cnpj));
- }
- /**
- * Retorna uma {@link String} contendo os 2 digitos Validadores para o {@link Cnpj}
- * Enviado. Para tal usa-se do teste estipulado pela Receita Federal.
- * <BR>
- * <BR>mais informa��es em: http://www.receita-fazenda.gov.br
- * @see #getVerifyDigits()
- * @see #isValid(Cnpj)
- * @param cnpj O cnpj ao qual deseja-se saber quais s�o os 2 digitos validadores.
- * @return {@link String} contendo os 2 digitos que validam o CNPJ enviado.
- * <br><tt>null</tt> - caso o parametro enviado seja nulo.
- */
- public static String calculateVerifyDigits(Cnpj cnpj) {
- return (cnpj.equals(null)) ? null :
- VerifierDigits.getValidDigits(cnpj, BASE_LENGTH, FACTOR, COEFICIENTS);
- }
- /**
- * Calcula o digito verificador para o Cnpj que o {@link Long} representa.
- * <BR>O mesmo que:
- * <BR><tt>{@link Cnpj} cnpj = {@link #valueOf(Long)};
- * <BR>{@link #calculateVerifyDigits(Cnpj)};</tt>
- * <BR>
- * <BR>Confira {@link #calculateVerifyDigits(Cnpj)} para informa��es de como o m�todo
- * funciona.
- * @see #valueOf(Long)
- * @see #calculateVerifyDigits(Cnpj)
- * @param cnpj N�mero que representa o cnpj.
- * @return {@link String} contendo os 2 digitos que validam o CNPJ enviado.
- * <br><tt>null</tt> - caso o parametro enviado seja nulo.
- */
- public static String calculateVerifyDigits(Long cnpj) {
- return calculateVerifyDigits(valueOf(cnpj));
- }
- /**
- * Calcula o digito verificador para o Cnpj que a {@link String} representa.
- * <BR>O mesmo que:
- * <BR><tt>{@link Cnpj} cnpj = {@link #valueOf(String)};
- * <BR>{@link #calculateVerifyDigits(Cnpj)};</tt>
- * <BR>
- * <BR>Confira {@link #calculateVerifyDigits(Cnpj)} para informa��es de como o m�todo
- * funciona.
- * @see #valueOf(String)
- * @see #calculateVerifyDigits(Cnpj)
- * @param cnpj N�mero que representa o cnpj.
- * @return {@link String} contendo os 2 digitos que validam o CNPJ enviado.
- * <br><tt>null</tt> - caso o parametro enviado seja nulo.
- */
- public static String calculateVerifyDigits(String cnpj) {
- return calculateVerifyDigits(valueOf(cnpj));
- }
- /**
- * Cria um CNPJ <u>v�lido</u> randomico
- * @see #isValid()
- * @return {@link Cnpj} com um n�mero aleat�rio v�lido
- */
- public static Cnpj createRandom() {
- Cnpj cnpj = null;
- boolean needCalculate = true;
- while (needCalculate) {
- long randomBasePlusOrder = (long) (Math.random() * Math.pow(10, 12));
- String digits = calculateVerifyDigits(randomBasePlusOrder + "00");
- cnpj = new Cnpj(randomBasePlusOrder + digits);
- needCalculate = !cnpj.isValid();
- }
- return cnpj;
- }
- /**
- * Altera o valor da ordem, quando inv�lido, para a ordem 0001.
- * <BR>S�o invalidos ordens com mais de 4 digitos, al�m da ordem 0000, ordens com
- * menos de 4 digitios ter�o 0 acrecentado a esquerda, Por exemplo "12" ser� "0012"
- * @see #isValid()
- * @return {@link Cnpj} com um n�mero aleat�rio v�lido
- */
- private static String formatOrder(String order) {
- String cnpjOrder = null;
- if (order == null
- || (cnpjOrder = StringUtil.toNumericDigitsOnly(order))
- .matches("0{"+cnpjOrder.length()+"}")
- || (cnpjOrder.length() > 4)
- || (cnpjOrder = "0001".substring(0,4-cnpjOrder.length()) + cnpjOrder)
- .equals("0000"))
- cnpjOrder = "0001";
- return cnpjOrder;
- }
- /**
- * Cria um CNPJ <u>v�lido</u> randomico para a ordem (n�mero da filial) enviada, onde
- * a ordem representa o trecho em negrito do CNPJ
- * ##.###.###/<font color="darkred"><u>####</u></font>-## .
- * <BR>
- * <BR>A ordem obrigatoriamente deve ser um n�mero entre 1 e 9999, quaiquer valor
- * fora deste range ser� automaticamente convertido para 1.
- * @see #isValid()
- * @param order valor da ordem (n�mero da filial) do cnpj
- * @return {@link Cnpj} com um n�mero aleat�rio v�lido para a ordem especificada.
- */
- public static Cnpj createRandom(Integer order) {
- return (order == null) ? createRandom("0001") :
- createRandom(order.toString());
- }
- /**
- * Cria um CNPJ <u>v�lido</u> randomico para a ordem (n�mero da filial) enviada, onde
- * a ordem representa o trecho em negrito do CNPJ
- * ##.###.###/<font color="darkred"><u>####</u></font>-## .
- * <BR>
- * <BR>A ordem obrigatoriamente deve ser uma {@link String} n�merica entre "0001" e
- * "9999", quaiquer valor fora deste range ser� automaticamente convertido para
- * "0001".
- * @see #isValid()
- * @param order valor da ordem (n�mero da filial) do cnpj
- * @return {@link Cnpj} com um n�mero aleat�rio v�lido para a ordem especificada.
- */
- public static Cnpj createRandom(String order) {
- String cnpjOrder = formatOrder(order);
- Cnpj cnpj = null;
- boolean needTryAgain = true;
- while (needTryAgain) {
- long random = (long) (Math.random() * Math.pow(10, 8));
- String digits = calculateVerifyDigits(random + cnpjOrder + "00");
- cnpj = new Cnpj(random + cnpjOrder + digits);
- needTryAgain = !cnpj.isValid();
- }
- return cnpj;
- }
- /**
- * O mesmo que {@link #valueOf(BigInteger)}.{@link #isValid()}.
- * <BR>
- * <BR>Utilize este m�todo com cuidado, pois ele implicitamente cria uma instancia
- * de {@link Cnpj}, e em seguida invoca a realiza��o do teste de validade. Caso
- * necessite fazer {@link #isValid(BigInteger)} varias vezes para o mesmo
- * {@link Cnpj} crie o objeto e o utilize, para consumir menos processo.
- * <BR>
- * <BR>Consulte {@link #isValid()} para verificar como o teste � realizado.
- * @see #isValid()
- * @see #Cnpj(BigInteger)
- * @see #valueOf(BigInteger)
- * @param cnpj N�mero que representa o cnpj.
- * @return <tt>true</tt> - caso o {@link Cnpj} seja v�lido.
- * <BR><tt>false</tt> - caso contrario.
- */
- public static boolean isValid(BigInteger cnpj) {
- return valueOf(cnpj).isValid();
- }
- /**
- * O mesmo que {@link #valueOf(Long)}.{@link #isValid()}.
- * <BR>
- * <BR>Utilize este m�todo com cuidado, pois ele implicitamente cria uma instancia
- * de {@link Cnpj}, e em seguida invoca a realiza��o do teste de validade. Caso
- * necessite fazer {@link #isValid(Long)} varias vezes para o mesmo
- * {@link Cnpj} crie o objeto e o utilize, para consumir menos processo.
- * <BR>
- * <BR>Consulte {@link #isValid()} para verificar como o teste � realizado.
- * @see #isValid()
- * @see #Cnpj(Long)
- * @see #valueOf(Long)
- * @param cnpj N�mero que representa o cnpj.
- * @return <tt>true</tt> - caso o {@link Cnpj} seja v�lido.
- * <BR><tt>false</tt> - caso contrario.
- */
- public static boolean isValid(Long cnpj) {
- return valueOf(cnpj).isValid();
- }
- /**
- * O mesmo que {@link #valueOf(String)}.{@link #isValid()}.
- * <BR>
- * <BR>Utilize este m�todo com cuidado, pois ele implicitamente cria uma instancia
- * de {@link Cnpj}, e em seguida invoca a realiza��o do teste de validade. Caso
- * necessite fazer {@link #isValid(String)} varias vezes para o mesmo
- * {@link Cnpj} crie o objeto e o utilize, para consumir menos processo.
- * <BR>
- * <BR>Consulte {@link #isValid()} para verificar como o teste � realizado.
- * @see #isValid()
- * @see #Cnpj(String)
- * @see #valueOf(String)
- * @param cnpj N�mero que representa o cnpj.
- * @return <tt>true</tt> - caso o {@link Cnpj} seja v�lido.
- * <BR><tt>false</tt> - caso contrario.
- */
- public static boolean isValid(String cnpj) {
- return valueOf(cnpj).isValid();
- }
- /**
- * Caso o {@link BigInteger} enviado seja nulo, retorna null, caso contrario
- * transforma-o em string e o envia para {@link #toCnpjString(String)} para
- * tratamento.
- * @see #toCnpjString(String)
- * @param cnpj {@link BigInteger} n�mero que representa o CNPJ.
- * @return uma cnpjString sem formata��o, apenas com os digitos
- * <BR><tt>null</tt> Caso o parametro enviado seja nulo.
- */
- public static String toCnpjString(BigInteger cnpj) {
- return (cnpj == null) ? null : toCnpjString(cnpj.toString());
- }
- /**
- * Caso o {@link Long} enviado seja nulo, retorna null, caso contrario transforma-o
- * em string e o envia para {@link #toCnpjString(String)} para tratamento.
- * @see #toCnpjString(String)
- * @param cnpj {@link Long} n�mero que representa o CNPJ.
- * @return uma cnpjString sem formata��o, apenas com os digitos
- * <BR><tt>null</tt> Caso o parametro enviado seja nulo.
- */
- public static String toCnpjString(Long cnpj) {
- return (cnpj == null) ? null : toCnpjString(cnpj.toString());
- }
- /**
- * Retira toda formata��o existente na String enviada, removendo todos os caracters
- * inv�lidos, e deichando apenas n�meros, al�m de ajustar a string para 14 digitos.
- * <BR>
- * <BR>Caso a sequencia de digitos seja inferior a 14 digitos, preenche a sequencia
- * com "0"s a esquerda da sequencia.
- * <BR>
- * <BR>Caso a sequencia de digitos seja superio a 14 digitos ela ser� truncada para
- * 14 digitos.
- * @see StringUtil#toNumericDigitsOnly(String)
- * @param cnpj {@link String} a ser transformado em uma cnpjString.
- * @return uma cnpjString sem formata��o, apenas com os digitos
- * <BR><tt>null</tt> Caso o parametro enviado seja nulo.
- */
- public static String toCnpjString(String cnpj) {
- if (cnpj != null) {
- cnpj = StringUtil.toNumericDigitsOnly(cnpj);
- if (cnpj.length()>14)
- cnpj = cnpj.substring(0, 14);
- else if (cnpj.length()<14) //insert (14-length) "0"s before the cnpj number
- cnpj = "00000000000000".substring(cnpj.length(), 14) + cnpj;
- }
- return cnpj;
- }
- /**
- * Converte o {@link BigInteger} enviado em um {@link Cnpj}.
- * <BR>
- * <BR>O mesmo que: <tt>new {@link #Cnpj(BigInteger)}</tt>.
- * <BR>
- * <BR>Aceita valor de entrado nulo, e neste caso retorna um objeto {@link Cnpj} onde
- * {@link #isNull()} � <tt>true</tt>
- * @see #Cnpj(BigInteger)
- * @param cnpj N�mero do cnpj
- * @return {@link Cnpj} que representa o n�mero enviado.
- */
- public static Cnpj valueOf(BigInteger cnpj) {
- return new Cnpj(cnpj);
- }
- /**
- * Converte o {@link Long} enviado em um {@link Cnpj}.
- * <BR>
- * <BR>O mesmo que: <tt>new {@link #Cnpj(Long)}</tt>.
- * <BR>
- * <BR>Aceita valor de entrado nulo, e neste caso retorna um objeto {@link Cnpj} onde
- * {@link #isNull()} � <tt>true</tt>
- * @see #Cnpj(Long)
- * @param cnpj N�mero do cnpj
- * @return {@link Cnpj} que representa o n�mero enviado.
- */
- public static Cnpj valueOf(Long cnpj) {
- return new Cnpj(cnpj);
- }
- /**
- * Converte o {@link String} enviado em um {@link Cnpj}.
- * <BR>
- * <BR>O mesmo que: <tt>new {@link #Cnpj(String)}</tt>.
- * <BR>
- * <BR>Aceita valor de entrado nulo, e neste caso retorna um objeto {@link Cnpj} onde
- * {@link #isNull()} � <tt>true</tt>
- * @see #Cnpj(String)
- * @param cnpj N�mero do cnpj
- * @return {@link Cnpj} que representa o n�mero enviado.
- */
- public static Cnpj valueOf(String cnpj) {
- return new Cnpj(cnpj);
- }
- /**
- * Verifica��o se este CNPJ � valido, null significa que o teste ainda n�o foi
- * realizado, so � verificar uma vez, apois a primeira chamada de isValid()
- * @see isValid()
- */
- @Transient private Boolean valid = null;
- /**
- * Constroi um CNPJ com valor nulo
- * @see #isNull()
- */
- public Cnpj() {
- super(null);
- }
- /**
- * Constroi um objeto {@link Cnpj} a partir de um {@link BigInteger}.
- * <BR>
- * <BR>Qualquer numero enviado, ser� devidamente tratado, invocando
- * implicitamente {@link #toCnpjString(BigInteger)}, veja sua documenta��o para
- * maiores detalhes.
- * @see #toCnpjString(BigInteger)
- * @param cnpj {@link BigInteger} contendo o valor do cnpj
- */
- public Cnpj(BigInteger cnpj) {
- super(toCnpjString(cnpj));
- }
- /**
- * Constroi um objeto {@link Cnpj} a partir de um {@link Long}.
- * <BR>
- * <BR>Qualquer numero enviado, ser� devidamente tratado, invocando
- * implicitamente {@link #toCnpjString(Long)}, veja sua documenta��o para maiores
- * detalhes.
- * @see #toCnpjString(Long)
- * @param cnpj {@link Long} valor do cnpj.
- */
- public Cnpj(Long cnpj) {
- super(toCnpjString(cnpj));
- }
- /**
- * Constroi um objeto {@link Cnpj} a partir da uma {@link String}.
- * <BR>
- * <BR>Qualquer que seja a string passada, ela ser� devidamente tratada, invocando
- * implicitamente {@link #toCnpjString(String)}, veja sua documenta��o para maiores
- * detalhes.
- * @see #toCnpjString(String)
- * @param cnpj {@link String} contendo o cnpj.
- */
- public Cnpj(String cnpj) {
- super(toCnpjString(cnpj));
- }
- /**
- * Applica ao valor deste {@link Cnpj} a mascara de formata��o {@link Cnpj#MASK}
- * @return
- */
- public String applayMask() {
- String mask = "%s.%s.%s/%s-%s";
- String cnpj = getCnpjString();
- return String.format(mask,
- cnpj.substring(0,2),
- cnpj.substring(2,5),
- cnpj.substring(5,8),
- cnpj.substring(8,12),
- cnpj.substring(12,14)
- );
- }
- /**
- * Verifica se o <tt>{@link Object} cnpj</tt> enviado representa o mesmo que este
- * cnpj.
- * <BR>
- * <BR>� capaz de testar se este objeto {@link Cnpj} � igual a uma {@link String},
- * {@link BigInteger}, {@link Long}, a
- * uma {@link StringDigitsSequence}, ou a outro {@link Cnpj}.
- * <BR>
- * <BR>O Cnpj aceita o construtor nulo, neste caso se torando um cnpj <tt>null</tt>,
- * isto pode ser testado em {@link #isNull()}, comparar um cnpj com uma variavel com
- * valor nulo, voltar� true, caso o cnpj tb seja nulo, em outras palavras:
- * <BR><tt>if (cnpj.isNull())
- * <BR> (cnpj.equals(null)) //is always true
- * </tt>
- * @return <tt>true</tt> caso o objeto enviado represente o mesmo cnpj deste objeto
- * <BR><tt>false</tt> caso contrario.
- */
- public boolean equals(Object cnpj) {
- boolean result = false;
- if (cnpj == null || this.isNull())
- result = cnpj == getCnpjString();
- else if (cnpj instanceof String)
- result = toCnpjString((String)cnpj).equals(getCnpjString());
- else if (cnpj instanceof StringDigitsSequence)
- result = ((StringDigitsSequence)cnpj).getSequenceString()
- .equals(getCnpjString());
- else if (cnpj instanceof Long)
- result = toCnpjString((Long)cnpj).equals(getCnpjString());
- else if (cnpj instanceof BigInteger)
- result = toCnpjString((BigInteger)cnpj).equals(getCnpjString());
- return result;
- }
- /**
- * Retorna os 8 digitos basicos deste {@link Cnpj} em uma string, onde os digitos
- * basicos correspondem ao trecho em destaque do {@link Cnpj}
- * <font color="darkred"><u>##</u>.<u>###</u>.<u>###</u></font>/####-## .
- * <BR>
- * <BR>A string de retorno � sem formata��o, contendo apenas os 8 digitos.
- * @see #isNull()
- * @see #getCnpjString()
- * @see #getOrderDigits()
- * @see #getVerifyDigits()
- * @return {@link String} - com os 8 digitos basicos.
- * <BR><tt>null</tt> - caso o cpf seja nulo, consulte {@link #isNull()}
- */
- public String getBaseDigits() {
- return (isNull()) ? null : getSequenceString().substring(0, 8);
- }
- /**
- * Retorna os 14 digitos deste {@link Cnpj} em uma string.
- * <BR>
- * <BR>A string de retorno � sem formata��o, contendo apenas os 14 digitos.
- * @see #isNull()
- * @see #getBaseDigits()
- * @see #getOrderDigits()
- * @see #getVerifyDigits()
- * @return {@link String} - com os 14 digitos representativos do {@link Cnpj}.
- * <BR><tt>null</tt> - caso o cpf seja nulo, consulte {@link #isNull()}
- */
- public String getCnpjString() {
- return getSequenceString();
- }
- /**
- * Retorna os 4 digitos da ordem deste {@link Cnpj} em uma string, onde os digitos
- * de ordem correspondem ao trecho em destaque do {@link Cnpj}
- * ##.###.###/<font color="darkred"><u>####</u></font>-##
- * <BR>a ordem do {@link Cnpj} representa o n�mero da filial.
- * <BR>
- * <BR>A string de retorno � sem formata��o, contendo apenas os 4 digitos.
- * @see #isNull()
- * @see #getBaseDigits()
- * @see #getCnpjString()
- * @see #getVerifyDigits()
- * @return {@link String} - com os 4 digitos de ordem.
- * <BR><tt>null</tt> - caso o cpf seja nulo, consulte {@link #isNull()}
- */
- public String getOrderDigits() {
- return (isNull()) ? null : getSequenceString().substring(8, 12);
- }
- /**
- * Retorna os 2 digitos de verifica��o deste {@link Cnpj} em uma string, onde os
- * digitos de verifica��o correspondem ao trecho em negrito do {@link Cnpj}
- * ##.###.###/####-<font color="darkred"><u>##</u></font> .
- * <BR>
- * <BR>Estes dois digitos n�o s�o necess�riamente v�lidos, e sim os contidos neste
- * Cnpj, caso {@link #isValid()} seja <tt>true</tt> ent�o estes 2 digitos coincidir�o
- * com os digitos v�lidos deste Cnpj. {@link #isValid()} pode ser false, e ainda
- * assim estes digitos podem ser coincidentes, o que indica que este {@link Cnpj}
- * � invalido pelas regras de exce��es.
- * <BR>
- * <BR>A string de retorno � sem formata��o, contendo apenas os 2 digitos.
- * <BR>
- * <BR>O calculo dos digitos verificadores corretos pode ser realizado enviando este
- * {@link Cnpj} para o m�todo {@link #calculateVerifyDigits(Cnpj)}.
- * @see #calculateVerifyDigits(Cnpj)
- * @see #isNull()
- * @see #getBaseDigits()
- * @see #getCnpjString()
- * @see #getOrderDigits()
- * @return {@link String} - com os 2 digitos de verifica��o.
- * <BR><tt>null</tt> - caso o cpf seja nulo, consulte {@link #isNull()}
- */
- public String getVerifyDigits() {
- return (isNull()) ? null : getSequenceString().substring(12, 14);
- }
- /**
- * Diz se este {@link Cnpj} representa um cnpj nulo, construido geralmente a partir
- * de {@link #Cnpj()}.
- * <BR>
- * <BR>Pode-se criar, tamb�m, Cnpj nulo enviando para o construtor um objeto com
- * valor nulo, Por Exemplo:
- * <br><tt>String a = null;
- * <BR>Cnpj cnpjNull = new Cnpj(a);</tt>
- * @return <tt>true</tt> - caso a String representativa deste {@link Cnpj} seja nula
- * <br><tt>false</tt> - caso contraio.
- */
- public boolean isNull() {
- return (getCnpjString() == null);
- }
- /**
- * Se este cnpj � um CNPJ valido para a receita federal.
- * <BR>
- * <BR>S� ser�o validos os {@link Cnpj}, n�o nulos ({@link #isNull()}), com os
- * digitos verificadores corretos, que n�o esteja contido em nenhuma das exce��es,
- * Por exemplo:
- * <BR> - N�mero de ordem igual a zero, 12.345.678/0000-04
- * <BR> - N�mero basico apenas com digitos repetidos e n�o zero, 11.111.111/0001-91
- * <BR> - Iniciado com tr�s zeros e com n�mero de ordem maior que trezentos,
- * 00.001.341/0301-00, exclu�-se desta verifica��o os {@link Cnpj}s do Banco do
- * Brasil SA 00.000.000/0401-42 por exemplo.
- * @return <tt>true</tt> - Caso o cnpj seja v�lido
- * <BR><tt>false</tt> - Caso o cnpj seja inv�lido
- */
- public boolean isValid() {
- if (valid == null)
- valid = validateTeste();
- return valid;
- }
- /**
- * Converte este {@link Cnpj} em um {@link BigInteger} representativo do n�mero deste
- * cnpj.
- * <BR>
- * <BR>Todo objeto {@link Cnpj} que � transformado em um {@link BigInteger} poder�
- * ser recuperado atraves de {@link #valueOf(BigInteger)}.
- * <BR>
- * <BR><tt>//is always true
- * <br>cnpj.equals(Cnpj.valueOf(cnpj.{@link #toBigInteger()}))</tt>
- * <BR>
- * <BR>Se <tt>({@link #isNull()} == true)</tt> ent�o tamb�m ser� verdade que
- * <tt>({@link #toBigInteger()} == null)</tt>
- * @see #valueOf(BigInteger)
- * @see #isNull()
- * @return {@link BigInteger} que representa este cnpj
- * <br><tt>null</tt> - caso o {@link #isNull()} seja <tt>true</tt>
- */
- public BigInteger toBigInteger() {
- return (isNull()) ? null : new BigInteger(toString());
- }
- /**
- * Converte este {@link Cnpj} em um {@link Long} representativo do n�mero deste
- * cnpj.
- * <BR>
- * <BR>Todo objeto {@link Cnpj} que � transformado em um {@link Long} poder�
- * ser recuperado atraves de {@link #valueOf(Long)}.
- * <BR>
- * <BR><tt>//is always true
- * <br>cnpj.equals(Cnpj.valueOf(cnpj.{@link #toLong()}))</tt>
- * <BR>
- * <BR>Se <tt>({@link #isNull()} == true)</tt> ent�o tamb�m ser� verdade que
- * <tt>({@link #toLong()} == null)</tt>
- * @see #valueOf(Long)
- * @see #isNull()
- * @return {@link Long} que representa este cnpj
- * <br><tt>null</tt> - caso o {@link #isNull()} seja <tt>true</tt>
- */
- public Long toLong() {
- return (isNull()) ? null : new Long(toString());
- }
- /**
- * Converte este {@link Cnpj} em um {@link String} aplicando a ela a mascara
- * {@link #MASK} de CNPJ {@value #MASK} . Tem a mesma fun��o que
- * {@link #applayMask()}
- * <BR>
- * <BR>Todo objeto {@link Cnpj} que � transformado em um {@link String} poder�
- * ser recuperado atraves de {@link #valueOf(String)}.
- * <BR>
- * <BR><tt>//is always true
- * <br>cnpj.equals(Cnpj.valueOf(cnpj.{@link #toString()}))</tt>
- * <BR>
- * <BR>Se <tt>({@link #isNull()} == true)</tt> ent�o tamb�m ser� verdade que
- * <tt>({@link #toString()} == null)</tt>
- * @see #valueOf(String)
- * @see #isNull()
- * @see #getCnpjString()
- * @return {@link String} que representa este cnpj
- * <br><tt>null</tt> - caso o {@link #isNull()} seja <tt>true</tt>
- */
- public String toString() {
- return applayMask();
- }
- /**
- * Verifica primeiramente todas as particularidades do CNPJ (como se todos os digitos
- * s�o iguais a zero) para s� depois fazer fazer o teste dos digitos verificadores
- * @see ValidateCnpj
- * @return <tt>true</tt> - quando cnpj � valido
- * <br><tt>false</tt> - quando o cnpj � invalido.
- */
- private boolean validateTeste() {
- boolean stillValid = true;
- for (ValidateCnpj validate : ValidateCnpj.values()) {
- stillValid = validate.isValid(this);
- if (!stillValid)
- break;
- }
- return stillValid;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment