Package br.com.caelum.stella.tinytype

Source Code of br.com.caelum.stella.tinytype.CPF

package br.com.caelum.stella.tinytype;

import br.com.caelum.stella.format.CPFFormatter;
import br.com.caelum.stella.validation.CPFValidator;

/**
* Representa um Cadastro de Pessoas Física - CPF.
*
* @author leobessa
*/
public final class CPF {

    /**
     * Número do CPF. Possui apenas os caracteres numéricos.
     */
    private final String numero;

    /**
     * Número do CPF. No formato ddd.ddd.ddd-dd .
     */
    private final String numeroFormatado;

    /**
     * Constrói um CPF com o número especificado. Se o número contiver
     * apenas caracteres numéricos ou estiver no formato ddd.ddd.ddd-dd,
     * ele é guardado com e sem formatação nos respectivos atributos.
     * Caso contrário, ele guarda o parâmetro como passado em ambos os atributos.
     *
     * @param numero número do CPF
     */
    public CPF(String numero) {
      CPFFormatter formatador = new CPFFormatter();
    if (formatador.isFormatted(numero)) {
      this.numero = formatador.unformat(numero);
      this.numeroFormatado = numero;
    } else if (formatador.canBeFormatted(numero)) {
      this.numero = numero;
      this.numeroFormatado = formatador.format(numero);
    } else {
      this.numero = this.numeroFormatado = numero;
    }
    }

    /**
     * Retorna o número do CPF apenas com os caracteres numéricos.
     *
     * @return número do CPF.
     */
    public String getNumero() {
        return numero;
    }

    /**
     * Retorna o número do CPF no formato ddd.ddd.ddd-dd .
     *
     * @return número do CPF no formato ddd.ddd.ddd-dd .
     */
    public String getNumeroFormatado() {
      return numeroFormatado;
    }

    /**
     * Retorna se o número do CPF é válido. O resultado é <code>true</code>
     * se os dígitos verificadores estão de acordo com a regra de cálculo.
     *
     * @return se o número do CPF é valido.
     *
     * @see CPFValidator
     */
  public boolean isValido() {
    return new CPFValidator().invalidMessagesFor(numero).isEmpty();
  }

    /**
     * Retorna uma representação em string desse CPF. A intenção desse método
     * é ser usado para impressão e retorna o número no formato ddd.ddd.ddd-dd .
     *
     * @return número do CPF no formato ddd.ddd.ddd-dd.
     */
    @Override
    public String toString() {
        return getNumeroFormatado();
    }

    /**
     * Retorna um hash code para esse CPF.
     *
     * @return um valor de hash code para esse objeto.
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((numero == null) ? 0 : numero.hashCode());
        return result;
    }

    /**
     * Compara esse <code>CPF</code> ao <code>Object</code>
     * especificado.  O resultado é <code>true</code> se e só se
     * o argumento é um objeto <code>CPF</code> com o mesmo número.
     *
     * @param obj o objeto a ser comparado
     * @return <code>true</code> se esse objeto é igual a <code>obj</code>;
     * <code>false</code> caso contrário.
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
      return true;
    }
        if (obj == null) {
      return false;
    }
        if (getClass() != obj.getClass()) {
      return false;
    }
        final CPF other = (CPF) obj;
        if (numero == null) {
            if (other.numero != null) {
        return false;
      }
        } else if (!numero.equals(other.numero)) {
      return false;
    }
        return true;
    }
}
TOP

Related Classes of br.com.caelum.stella.tinytype.CPF

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.