Primeiras aulas do curso Java Brasil: Formate datas, cpf e números nacionais

Java Brasil: Formate datas, cpf e números nacionais

Validação e formatação dados de CPF, CNPJ e Título de eleitor. - Introdução

Introdução

Olá! Bem-vindo ao curso de Java Brasil. Veremos como trabalhar com as peculiaridades do sistema no Brasil, de acordo com os documentos que temos aqui. Alguns deles são CPF, CNPJ e título de eleitor. Veremos como validar e formatar esses dados.

Veremos também como trabalhar com dinheiro, ou seja, o Real. Além disso, estudaremos como buscar um CEP na internet e usar no nosso sistema.

Durante esse treinamento, mostrarei algumas das maneiras para validar esses documentos brasileiros. É um curso introdutório, então veremos o passo a passo da construção dessas validações.

Para isso, usaremos algumas bibliotecas que selecionei. A primeira é a Stella, uma biblioteca da Caelum open source, então você pode contribuir caso você queira e usar livremente em suas aplicações. Essa biblioteca nos ajudará a validar o CPF, pois veremos qual o algoritmo por trás da validação nos dois últimos dígitos.

Stella

Abordaremos também a formatação do CPF. Pegaremos a string com o CPF e lidaremos com a formatação com os dois pontos e o hífen. Se você recebeu esse CPF do front-end com a máscara, saberá como tirá-la e trabalhar apenas com os números.

Usaremos também o Java Money, que é uma implementação JSR. A especificação deve entrar no Java 9, e é feita para lidar com dinheiro dentro do Java. Usaremos a Moneta, a implementação oficial dessa JSR.

Java Money

Também veremos como consumir dados de um CEP, o puxando da internet e colocando em nossa aplicação. Para isso usaremos o Via CEP.

Via CEP

Espero que você goste. Vamos começar o curso?

Validação e formatação dados de CPF, CNPJ e Título de eleitor. - Como validar um CPF?

Como validar um CPF?

Temos aqui dois CPFs, e precisamos saber se são válidos ou não.

86288366757
98745366797

Vou copiar o primeiro CPF e colocá-lo em um site com formulário que exija CPF, por exemplo, o da Alura.

Formulário Alura

Esses sites validam os campos preenchidos pelo usuário quando inserimos os dados. Então copiaremos o número de CPF no campo correspondente, e tiraremos o foco, clicando em outro campo em seguida.

Formulário Alura

O site não emitiu nenhum aviso no campo de CPF, apenas no de nome e email. Assim, podemos presumir que o CPF é válido. Testemos com o campo vazio.

Formulário Alura

Agora o site detecta que o CPF é inválido. Se preenchermos novamente e tirarmos o foco, a mensagem some.

Formulário Alura

E o segundo CPF?

Formulário Alura

O site pede para verificar o CPF, ou seja, ele é inválido.

Mas como saber se um CPF é válido? Existe um algoritmo para isso, e vamos conhecê-lo. Usaremos o primeiro CPF como exemplo.

Algoritmo

O primeiro passo do algoritmo é multiplicar os nove primeiros algarismos, a começar por 10 até 2. Os resultados dessas multiplicações devem ser somados. Nesse exemplo, a soma é 325.

Algoritmo

Mas não é o resultado da divisão que nos interessa, mas seu resto.

Algoritmo

Os números verificadores são os que vêm depois do traço. Como o primeiro número verificador do CPF 862.883.667-57 é 5, por enquanto o CPF é válido. Ainda há a segunda etapa, para calcular o outro número verificador.

Nessa etapa, usaremos os dez primeiros algarismos do CPF e a rodada de multiplicação começa em 11.

Algoritmo

Novamente, usaremos o resultado da soma das multiplicações, e o multiplicaremos por dez.

Algoritmo

E, novamente, é o resto da divisão por 11 que nos interessa.

Algoritmo

Como os dois dígitos verificadores corretos, podemos afirmar que o CPF é válido. Repetiremos o processo de verificação para o segundo CPF.

Algoritmo

Com o resultado da soma desses valores, faremos uma nova multiplicação e uma divisão.

Algoritmo

Se o primeiro dígito verificador não corresponde ao que está na sequência do CPF, não é necessário verificar o segundo; o CPF já é inválido.

Aprenderemos a fazer isso no Java. Para isso, abriremos o Eclipse, programa que será usado ao longo do curso todo. Criaremos um projeto novo, mas usaremos o Maven para nos ajudar a gerenciar.

No menu superior, seguiremos o caminho File > New > Other....

File new

Que abrirá a seguinte janela. Nela, devemos encontrar e selecionar Maven Project.

Maven

Essa escolha abrirá mais opções. Optaremos por Simple project.

Simple project

E, em seguida, precisamos preencher os campos Group Id e Artifact Id. Serão, respectivamente, br.com.alura.brasileirice e brasileirice.

Group Id

Ao clicar em Finish, o programa baixará o projeto.

Project explorer

Uma das pastas criadas é a de source do próprio Java. Nela, criaremos uma nova classe para fazer todo aquele algoritmo. Basta clicar com o botão direito e em New > Class.

Nova classe

Nova classe

No campo Package colocaremos a raiz mesmo br.com.alura. O nome da classe será ValidacaoDocumento. Clicando em Finish, a classe estará criada e o programa nos exibe o seguinte código:

package br.com.alura;

public class ValidacaoDocumento {

}

Vamos criar o método main para validar os CPFs, usando o atalho da minha IDE, com Ctrl + Espaço.

IDE

O código fica da seguinte maneira.

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {

  }

}

Agora precisamos pegar cada algarismo do CPF e multiplicar pelo número que corresponde à sua posição (10, 9, 8, 7, 6, 5, 4, 3, 2), depois somar e multiplicar por dez e dividir por onze... É um trabalhão, não é?

Será que não tem nada pronto na internet, nada que possamos reaproveitar? Como o algoritmo é bem repetitivo, é provável que alguém já tenha feito algo parecido. Vamos verificar no framework open source Stella, da Caelum. Você pode baixar e usar, além de mandar requests para fazer alterações. Ele possui validadores de documentos que só existem no Brasil, como CPF, CNPJ, título de eleitor, entre outros.

Stella

E como usar? Clicando em "Downloads", na parte superior, veremos a seguinte tela.

Stella downloads

Como estamos usando o Maven, podemos aproveitar essa parte de dependência. Vamos copiá-la no arquivo pom.xml, que está no Eclipse.

Pom

Dentro dele, temos:

<project xmlns="http://maven.apache.org/POM/4.0.0""xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelversion>
  <groupId>br.com.alura.brasileirice</groupId>
  <artifactId>Brasileirice</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

Precisamos criar uma dependência, e, dentro dela inserir o código de dependência copiado da Stella.

<project xmlns="http://maven.apache.org/POM/4.0.0""xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelversion>
  <groupId>br.com.alura.brasileirice</groupId>
  <artifactId>Brasileirice</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
    <dependency>
        <groupId>br.com.caelum.stella</groupId>
        <artifactId>caelum-stella-core</artifactId>
        <version>2.1.2</version>
      </dependency>
  </dependencies>

</project>

Com a dependência inserida, o programa baixará para nós a pasta Maven Dependencies

Maven Dependencies

E, dentro dela, estará o .jar do Stella.

Jar

Voltando à classe main, podemos validar o CPF. Para isso, precisamos inserir um CPF, e faremos isso com uma string. Será o primeiro CPF com o qual lidamos.

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
  }

}

Agora precisamos fazer a validação. Criaremos um CPFValidator, que é uma classe do Stella. Criaremos uma instância dessa classe, um objeto, que chamaremos de validador.

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    CPFValidator validador = new CPFValidator();
  }

}

Essa classe tem um método chamado assertValid, que verifica se o CPF é válido ou não. Chamaremos esse método.

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    CPFValidator validador = new CPFValidator();
    validador.assertValid(cpf);
  }

}

Ainda é preciso mostrar no console a mensagem que avisa se o CPF é válido ou não. Vamos clicar sobre assertValid para abrir a implementação em uma nova aba.

Assert

O que vemos nessa aba é o seguinte código:

@Override
public boolean is Eligible(String value) {
  if (value == null) {
    return false;
  }
  boolean result;
  if (is Formatted){
    result = FORMATED.matcher(value).matches();
  } else {
    result = UNFORMATED.matcher(value).matches();
  }
return result;
}

@Override
public void assertValid(String cpf) {
  Lists<ValidationMessage> errors = getInvalidValues(cpf);
  if (!errors.isEmpty()) {
    throw new InvalidStateException(errors);
  }
}

@Override
public List<ValidationMessage> invalidMessagesFor(String cpf){
  return getInvalidValues(cpf);
  }
}

Observe que o assertValid faz um InvalidStateException. Tentaremos capturar essa exceção na nossa validação, usando try/catch. Colocaremos uma mensagem que aparecerá no console (System.out.println), concatenado com o erro (e).

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    CPFValidator validador = new CPFValidator();
    try{


    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }
    validador.assertValid(cpf);
  }

}

Levaremos o validador para dentro do try, e acrescentaremos a mensagem de sucesso, para o caso de o CPF passar na validação.

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    CPFValidator validador = new CPFValidator();
    try{
  validador.assertValid(cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }

  }

}

Agora podemos rodar, clicando com o botão direito do mouse e em Run As > Java Application.

Run as

E o console nos mostra a mensagem CPF VÁLIDO

CPF válido

Vamos testar com um CPF inválido? Usaremos o segundo CPF, que já sabemos que é inválido.

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="98745366797";
    CPFValidator validador = new CPFValidator();
    try{
  validador.assertValid(cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }

  }

}

E vamos rodar novamente. O console exibe o seguinte:

CPF Inválido

O erro que ele exibe é INVALID CHECK DIGITS, que nos diz que os dígitos verificadores estão errados. Não precisamos fazer todo o algoritmo para descobrir isso, graças ao Stella.

É importante ter em mente que nem sempre um CPF válido pertence a uma pessoa. Às vezes conseguimos gerar números válidos que não correspondem ao cadastro de ninguém, mas que passam no algoritmo. Quando mandamos esse dado para um sistema de pagamento, como PayPal, conseguimos detectar se ele passa no algoritmo, mas não se ele pertence a alguém.

Há vários sites na internet que conseguem gerar CPFs válidos. Se jogarmos "gerador de CPF" no Google, você verá um grande número deles.

Gerado de CPF

Copiaremos um número gerado pelo site no nosso validador.

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="28048804948";
    CPFValidator validador = new CPFValidator();
    try{
  validador.assertValid(cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }

  }

}

E colocaremos para rodar, com o Run As > Java Application. O console nos retorna a seguinte mensagem:

CPF válido

Ou seja, os CPFs gerados pelo site realmente são válidos. O que não quer dizer que seja de uma pessoa.

Também é importante tomar cuidado com os números repetidos. vamos fazer um teste.

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="22222222222";
    CPFValidator validador = new CPFValidator();
    try{
  validador.assertValid(cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }

  }

}

Se fizermos pelo algoritmo, veremos que o número 22222222222 passa no teste. Mas, ao rodarmos no verificador, ele nos mostra a seguinte mensagem:

Repeated digits

A biblioteca já é inteligente o bastante para detectar que os números desse CPF são repetidos. Se o site não estiver devidamente preparado, esse número será reconhecido como um CPF válido, por passar no algoritmo.

São esses os cuidados que precisamos tomar na hora de validar CPFs com o algoritmo. Até a próxima!

Validação e formatação dados de CPF, CNPJ e Título de eleitor. - Validando CNPJ e Título de Eleitor

Validando CNPJ e Título de Eleitor

Já aprendemos a validar o CPF, precisamos aprender a validar outros documentos brasileiros, como o CNPJ. Para isso usaremos um gerador de CNPJ. Esse site, assim como diversos outros, nos permite gerar CNPJs com ou sem pontuação.

Gerador de cnpj

Precisamos apenas dos números, então desmarcaremos a opção de pontuação. Para validar um número gerado no site, usaremos a biblioteca do Stella, assim como fizemos para o CPF. Começaremos criando uma string

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="22222222222";
    CPFValidator validador = new CPFValidator();
    try{
  validador.assertValid(cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }
    String cnpj = "82588641000173";

  }

}

Já temos um validador para o CPF, então não podemos usar o mesmo para o CNPJ. Criaremos então uma classe, e um objeto dentro dela, ambos específicos para CNPJ.

    String cnpj = "82588641000173";
    CNPJValidator validadorCNPJ = new CNPJValidator();

Novamente, usaremos o assertValid. Mas em vez de passar o CPF, passaremos o CNPJ.

    String cnpj = "82588641000173";
    CNPJValidator validadorCNPJ = new CNPJValidator();
    validadorCNPJ.assertValid(cnpj);

Vamos fazer o teste e rodar. Clicaremos com o botão direito do mouse Run As > Java Application. O console nos mostra o seguinte:

Cpf inválido

É uma mensagem referente ao CPF que deixamos li (22222222222), e não há nada refente ao CNPJ. Não colocamos um try/catch para ele, então o faremos agora.

    String cnpj = "82588641000173";
    CNPJValidator validadorCNPJ = new CNPJValidator();
    try{

    }catch (InvalidStateException e) {
    }

    validadorCNPJ.assertValid(cnpj);

E passaremos o validadorCNPJ para dentro do try, acrescentando as mensagens para o console.

    String cnpj = "82588641000173";
    CNPJValidator validadorCNPJ = new CNPJValidator();
    try{
        validadorCNPJ.assertValid(cnpj);
        System.out.println("CNPJ VÁLIDO");

    }catch (InvalidStateException e) {
        System.out.println("CNPJ INVÁLIDO :" + e);
    }

Rodando novamente, temos no console:

Cpf inválido

Substituiremos o CPF pelo primeiro número usado, que é 86288366757.

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    CPFValidator validador = new CPFValidator();
    try{
  validador.assertValid(cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }

    String cnpj = "82588641000173";
    CNPJValidator validadorCNPJ = new CNPJValidator();
    try{
        validadorCNPJ.assertValid(cnpj);
        System.out.println("CNPJ VÁLIDO");

    }catch (InvalidStateException e) {
        System.out.println("CNPJ INVÁLIDO :" + e);
    }

O console nos retorna a seguinte mensagem:

Válidos

Agora, com a biblioteca, conseguimos validar tanto o CPF como o CNPJ. Precisamos também validar o título de eleitor, e a Stella será útil novamente. Com um gerador de título de eleitor

Gerador título

Criaremos uma nova string abaixo do bloco referente ao CNPJ:

    String tituloEleitor="417453530116";
    TituloEleitoralValidator validadorTitulo = new TituloEleitoralValidator();
    validadorTitulo.assertValid(tituloEleitor);

Já sabemos que é preciso tratar com try/catch, então acrescentaremos isso agora.

    String tituloEleitor="417453530116";
    TituloEleitoralValidator validadorTitulo = new TituloEleitoralValidator();
    try{
      validadorTitulo.assertValid(tituloEleitor);
        System.out.println("TÍTULO VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("TÍTULO INVÁLIDO :" + e);
    }

Com o código completo, podemos rodar para testar as validações.

Título válido

Os três documentos são válidos. Vamos trocar o último algarismo do título por zero, para ver se o programa detecta o erro.

    String tituloEleitor="417453530110";
    TituloEleitoralValidator validadorTitulo = new TituloEleitoralValidator();
    try{
      validadorTitulo.assertValid(tituloEleitor);
        System.out.println("TÍTULO VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("TÍTULO INVÁLIDO :" + e);
    }

O console dos exibe a mensagem:

CPF VÁLIDO
CNPJ VÁLIDO
TÍTULO INVÁLIDO : br.com.caelum.stella.validation.InvalidStateException: Validation errors: [TituloEleitoralError : INVALID CHECK DIGITS]

Ou seja, o programa percebeu que um dos dígitos verificadores está errado. Voltaremos o título para o número original, e faremos uma troca no CNPJ, mudando o penúltimo número para zero.

String cnpj = "82588641000103";
CNPJValidator validadorCNPJ = new CNPJValidator();
try{
    validadorCNPJ.assertValid(cnpj);
    System.out.println("CNPJ VÁLIDO");

}catch (InvalidStateException e) {
    System.out.println("CNPJ INVÁLIDO :" + e);
}

E o console nos mostrará o seguinte:

CPF VÁLIDO
CNPJ INVÁLIDO : br.com.caelum.stella.validation.InvalidStateException: Validation errors: [CNPJError : INVALID CHECK DIGITS]
TÍTULO VÁLIDO

Agora temos certeza de que está tudo funcionando adequadamente. Observando o código novamente, notamos que o validador está se repetindo bastante. Podemos deixar o código mais elegante eliminando essa repetição. É importante reparar que são variações do validaor: validadorCPF, validadorCNPJ e validadorTitulo.

Quando passamos o mouse sobre o CPFValidator, ele nos mostra a opção de abrir a classe em outra aba.

Open declaration

Clicaremos sobre ela com o Ctrl pressionado para abri-la. Em seu código, vemos a seguinte linha:

public class CFPValidator implements Validador<String> {
  ...
}

Todos os validadores implementam a interface Validator. Quando verificamos no validador do CNPJ e do título, vemos linhas correspondentes. Portanto, podemos extrair essa validação e criar um método, que recebe um validador e um documento. Basta informar a instância (que é o validador específico que queremos usar), que ele verificará se o documento em questão é válido.

Inseriremos o novo trecho de código após a chave que encerra o método main. O método que criaremos pode ser private e tem que ser static porque estamos chamando no método main. Ele não precisa retornar nada porque estará capturando do try, portanto será void. Assim:

private static void validarDocumentos (Validator<String> validador, String documento)

Precisamos chamar o validador e o método, que é o assertValid, passando o documento que queremos chamar.

private static void validarDocumentos (Validator<String> validador, String documento){
  validador.assertValid(documento);
}

Com o método feito, podemos chamá-lo lá no main. Começaremos pelo trecho do CPF, que está assim:

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    CPFValidator validador = new CPFValidator();
    try{
  validador.assertValid(cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }
}

Para chamar o método que acabamos de criar, podemos apagar o validador.

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    CPFValidator validador = new CPFValidator();
    try{
        validarDocumentos(validador, documento);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }
}

Nesse caso, o validador é o new CPFValidator, e o documento é o cpf. Com as devidas substituições:

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    CPFValidator validador = new CPFValidator();
    try{
        validarDocumentos(new CPFValidator(), cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }
}

Agora podemos excluir a linha que precede o try, que redunda com a que inserimos.

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    try{
        validarDocumentos(new CPFValidator(), cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }
}

Se rodarmos, o programa reconhece que é um CPF válido:

CPF VÁLIDO
CNPJ INVÁLIDO : br.com.caelum.stella.validation.InvalidStateException: Validation errors: [CNPJError : INVALID CHECK DIGITS]
TÍTULO VÁLIDO

E se trocarmos o último dígito do CPF por zero?

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    try{
        validarDocumentos(new CPFValidator(), cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }
}

Se colocarmos para rodar:

CPF INVÁLIDO : br.com.caelum.stella.validation.InvalidStateException: Validation errors: [CPFrror : INVALID CHECK DIGITS]
CNPJ INVÁLIDO : br.com.caelum.stella.validation.InvalidStateException: Validation errors: [CNPJError : INVALID CHECK DIGITS]
TÍTULO VÁLIDO

Ele percebeu que os dígitos validadores estão incorretos. Podemos fazer isso para os outros dois documentos. O código completo fica:

package br.com.alura;

public class ValidacaoDocumento {

  public static void main (String[] args) {
    String cpf="86288366757";
    try{
        validarDocumentos(new CPFValidator(), cpf);
  System.out.println("CPF VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("CPF INVÁLIDO : " + e);
    }  

    String cnpj = "82588641000173";
    try{
        validarDocumentos(new CNPJValidator(), cnpj);
        System.out.println("CNPJ VÁLIDO");

    }catch (InvalidStateException e) {
        System.out.println("CNPJ INVÁLIDO :" + e);
    }

    String tituloEleitor="417453530116";
    try{
      validarDocumentos (new TituloEleitoralValidator(), tituloEleitor);
        System.out.println("TÍTULO VÁLIDO");

    }catch (InvalidStateException e) {
      System.out.println("TÍTULO INVÁLIDO :" + e);
    }

Inserindo novos valores gerados pelos sites para cada documento e rodando, o console nos mostra:

CPF VÁLIDO
CNPJ VÁLIDO
TÍTULO VÁLIDO

O que fizemos é uma abordagem para melhorar o código, que pode ser usada para validar qualquer documento. Basta passar o validador e o documento em questão. Espero que tenha gostado. Até a próxima!

Sobre o curso Java Brasil: Formate datas, cpf e números nacionais

O curso Java Brasil: Formate datas, cpf e números nacionais possui 106 minutos de vídeos, em um total de 33 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Java acessando integralmente esse e outros cursos, comece hoje!

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana