domingo, 6 de maio de 2018

JavaFX - verificador de cpfs

Já que criamos um didático gerador de cpfs,
acho muito justo também criarmos um verificador,
precisamos saber se os cpfs criados por nós são válidos.

Por isto ser tão justo criei este programa que faz
validação de um cpf inserido em sua entrada de dados.
Acompanhe nas várias imagens e no vídeo do post primeiro.

Veja abaixo imagens do programa em execução:








Veja abaixo um vídeo do programa em execução



Veja abaixo o código do programa:


import javafx.scene.Scene;

import javafx.stage.Stage;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.paint.Color;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextField;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import java.util.function.UnaryOperator;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;

public class PROJETO extends Application {
     static String [ ] receita = {
         "CPF é o Cadastro de Pessoa Física,\n",
         "um número composto por 11 dígitos\n",
         "que fica registrado na Receita Federal\n",
         "armazenando informações sobre cada pessoa.\n",
         "Este programa não tem ligação alguma\n",
         "com a receita federal,\n",
         "e os cpfs aqui gerados mesmo válidos\n",
         "não estão vinculados, isto significa\n",
     "que eles não existem.\n"};         
     static TextField textField_1 = new TextField ( );
     static HBox hbox_1 = new HBox ( textField_1 );
     static StringBuilder st = new StringBuilder ( );
     static int Vet_cpf [ ] = new int [ 12 ];
     static int Vet_cpf_2 [ ] = new int [ 12 ];
     static int Vet_cpf_3 [ ] = new int [ 12 ];
     static int val_cpf [ ] = { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
     static int val_cpf_2 [ ] = { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
     static int n = 9;
     static int a = 0, e = 0, f = 0, g = 0, h = 0,
              i = 0, j = 0, l = 0, o = 0, u = 0, tot = 0;
     static String str_1;
     public static Label lbl = new Label ( );
     public static Label lbl_2 = new Label ( );
     static Text t_1 = new Text ( );
     static Text t_2 = new Text ( );
     static Text t_3 = new Text ( );
     static Text t_4 = new Text ( );
     static Text t_5 = new Text ( );
     static Text t_6 = new Text ( );
     static VBox vbox = new VBox ( );
     static GridPane grid = new GridPane ( );
     static MenuBar menuBar = new MenuBar ( );
     static Pane ro_ot = new Pane ( );
     static BorderPane root = new BorderPane ( );
     static Scene scene = new Scene ( vbox, 500, 300 );
     // /////////////////////////////////////////////////////////////////////////
     public static int Menu_Bar ( ) {
         EventHandler < ActionEvent > action = changeTabPlacement ( );
         Menu menu = new Menu ( "Arq" );
         MenuItem cpf = new MenuItem ( "Cpf" );
         MenuItem sair = new MenuItem ( "Sair" );
         MenuItem sobre = new MenuItem ( "Sobre" );
         menu.getItems ( ).add ( cpf );
         menu.getItems ( ).add ( sobre );
         menu.getItems ( ).add ( sair );     
         cpf.setOnAction ( action );
         sobre.setOnAction ( action );
         sair.setOnAction ( action );
         menuBar.getMenus ( ).add ( menu );
         root.setTop ( menuBar );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////////////
     private static EventHandler < ActionEvent > changeTabPlacement ( ) {
         String args = "";
         return new EventHandler < ActionEvent > ( ) {
              public void handle ( ActionEvent event ) {
                   MenuItem mItem = ( MenuItem ) event.getSource ( );
                   String side = mItem.getText ( );
                   if ( "Cpf".equalsIgnoreCase ( side ) ) {
                        st = new StringBuilder ( );
                        tot = 0;
                        textField_1.clear ( );
                        textField_1.setDisable ( false );
                        textField_1.setVisible ( true );             
                        lbl_2.setVisible ( true );
                        t_1.setDisable ( true );
                        t_1.setVisible ( false );
                        t_4.setDisable ( true );
                        t_4.setVisible ( false );
                        t_5.setDisable ( true );
                        t_5.setVisible ( false );
                        t_6.setDisable ( true );
                        t_6.setVisible ( false );
                        Pesquisa ( args );
                   }
                   else if ( "Sobre".equalsIgnoreCase ( side ) ) {
                        int i = 0;
                        st = new StringBuilder ( );
                        for ( i = 0; i < receita.length; i++ ) {
                            st.append ( receita [ i ] );
                        }
                        t_1.setX ( 120 );
                        t_1.setY ( 80 );
                        t_1.setFill ( Color.BLACK );
                        t_1.setText ( " " + st );  
                        t_1.setDisable ( false );
                        t_1.setVisible ( true );
                        t_4.setDisable ( true );
                        t_4.setVisible ( false );
                        t_5.setDisable ( true );
                        t_5.setVisible ( false );
                        t_6.setDisable ( true );
                        t_6.setVisible ( false );                
                        lbl_2.setVisible ( false );
                        textField_1.setDisable ( true );
                        textField_1.setVisible ( false );
                   }
                   if ( "Sair".equalsIgnoreCase ( side ) ) {
                        System.exit ( 0 );
                   }
                   root.getChildren ( ).addAll ( t_1 );
              }
         };       
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void Gera_Cpf ( ) {
         t_6.setFont ( Font.font ( "Tahoma", FontWeight.BOLD, 16 ) );
         //Convertendo string em array de inteiro
         Vet_cpf = new int [ str_1.length ( ) ];
         for ( i = 0; i < Vet_cpf.length; i++ ) {          
              Vet_cpf [ i ] = Integer.parseInt
                        ( str_1.substring ( i, i + 1 ) );
              //System.out.print ( " " );
              //System.out.print ( Vet_cpf [ i ] );
         }
         // Abaixo o cpf informado       
         for ( i = 0; i < 11; i++ ) {
              if ( i == 3 )
                   st.append ( "." );
              if ( i == 6 )
                   st.append ( "." );
              if ( i == 9 )
                   st.append ( " - " );
              st.append ( Vet_cpf [ i ] );
         }
         t_4.setDisable ( false );
         t_4.setVisible ( true );
         t_4.setX ( 120 );
         t_4.setY ( 120 );
         t_4.setFill ( Color.BLUE );
         t_4.setText ( "Abaixo o cpf informado" );
         t_5.setDisable ( false );
         t_5.setVisible ( true );
         t_5.setX ( 120 );
         t_5.setY ( 150 );
         t_5.setFill ( Color.RED );
         t_5.setText ( " " + st );       
         o = Vet_cpf [ 9 ];
         u = Vet_cpf [ 10 ];
         for ( i = 0; i < 9; i++ ) {
              Vet_cpf_2 [ i ] = Vet_cpf [ i ] * val_cpf [ i ];
              e = e += Vet_cpf_2 [ i ];
         }
         f = e % 11;
         g = 11 - f;
         if ( g > 9 )
              g = 0;
         Vet_cpf [ 9 ] = g;
         for ( i = 0; i < 10; i++ ) {
              Vet_cpf_3 [ i ] = Vet_cpf [ i ] * val_cpf_2 [ i ];
              h = h += Vet_cpf_3 [ i ];
         }
         j = h % 11;
         l = 11 - j;
         if ( l > 9 )
              l = 0;
         t_6.setDisable ( false );
         t_6.setVisible ( true );
         if ( g == o && l == u ) {
              System.out.print ( "O cpf é válido" );
              t_6.setX ( 120 );
              t_6.setY ( 180 );
              t_6.setFill ( Color.BLACK );
              t_6.setText ( "O cpf é válido" );
         } else {
              System.out.print ( "O cpf não é válido" );
              t_6.setX ( 120 );
              t_6.setY ( 180 );
              t_6.setFill ( Color.BLACK );
              t_6.setText ( "O cpf não é válido" );
         }      
         // As variáveis são resetadas para
         // serem usadas numa nova verificação.
         e = 0;
         f = 0;
         g = 0;
         h = 0;
         i = 0;
         j = 0;
         l = 0;       
     }
     // /////////////////////////////////////////////////////////////////////////
     // Este método limita o total de caracteres da String textst.
     // O total é informado em um dos parâmetros do método.
     public static void bloq_textfield ( TextField textField, int limit ) {
         UnaryOperator < Change > filtro = change -> {
              if ( change.isContentChange ( ) ) {
                   int newLength = change.getControlNewText ( ).length ( );
                   if ( newLength > limit ) {
                        String textst = change.getControlNewText ( )
                                 .substring ( 0, limit );
                        change.setText ( textst );
                        int oldLength = change.getControlText ( ).length ( );
                        change.setRange ( 0, oldLength );
                   }
              }
              return change;
         };
         textField.setTextFormatter ( new TextFormatter < Object > ( filtro ) );                
     }
     // /////////////////////////////////////////////////////////////////////////
     public static int Pesquisa ( String args ) {
         t_4.setFont ( Font.font ( "Tahoma", FontWeight.NORMAL, 14 ) );
         t_5.setFont ( Font.font ( "Tahoma", FontWeight.BOLD, 16 ) );
         // Posiciona o local exato do textfield
         hbox_1.setPadding ( new Insets ( 43, 0, 10, 165 ) );
         // Abaixo ajustamos o total de colunas do TextField
         textField_1.setPrefColumnCount ( 11 );
         textField_1.setPromptText ( "insira um cpf" );
         textField_1.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
              @Override
              public void handle ( KeyEvent event ) {
                   bloq_textfield ( textField_1, 11 );
                   // Este evento aceita apenas a tecla "ENTER" na entrada.
                   if ( event.getCode ( ) == KeyCode.ENTER ) {
                        // copiando a entrada do textfield numa string
                        str_1 = ( textField_1.getText ( ) );
                        Gera_Cpf ( );
                   }                 
              }
         } );
         ro_ot.getChildren ( ).addAll ( hbox_1 );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) throws Exception {
         stage.setTitle ( "JAVAFX - VERIFICADOR DE CPFS" );
         Menu_Bar ( );
         // Usando fonte em italic
         lbl.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 16 ) );
         // Posiciona o label na horizontal
         lbl.setLayoutX ( 110 );
         // Posiciona o label na vertical
         lbl.setLayoutY ( 10 );
         // Aplica cor no rótulo
         lbl.setTextFill ( Color.RED );
         lbl.setText ( "JAVAFX - VERIFICADOR DE CPFS" );
         t_3.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 26 ) );
         t_3.setX ( 120 );
         t_3.setY ( 250 );
         t_3.setFill ( Color.BLACK );
         t_3.setDisable ( false );
         t_3.setVisible ( true );
         t_3.setText (  "Por: Samuel Lima" );
         // Criando moldura
         vbox.setStyle ( "-fx-padding: 5;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 12;" + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;" + "-fx-border-color: blue;" );             
         ro_ot.getChildren ( ).addAll ( lbl, lbl_2 );
         root.getChildren ( ).addAll ( t_3, t_4, t_5, t_6 );
         vbox.getChildren ( ).addAll ( root, ro_ot,  grid );
         stage.setScene ( scene );
         stage.show ( );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String [ ] args ) {
         launch ( args );
     }
}

 

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.