sábado, 5 de maio de 2018

JavaFX - Gerador de cpf

Apenas para fins didáticos,
e sem me responsabilizar por uso indevido,
apresento este gerador de cpf.
O gerador aqui proposto pode gerar
até 11 cpfs de uma só vez,
e foi criado em linguagem java.
Quantidades inferiores a 1,
ou maior que 11 não passa pela entrada,
como também qualquer caractere,
passando mesmo tão somente dígitos.
Fica em sua responsabilidade o uso,
não indicado pelo autor que sou eu mesmo.


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.scene.control.TextArea;

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.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
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.Random;
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;
     static int 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 Canvas canvas = new Canvas ( );
     static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     static TextArea text = new TextArea ( );
     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 ( );
                        text.clear ( );
                        textField_1.setDisable ( false );
                        textField_1.setVisible ( true );             
                        text.setDisable ( false );
                        text.setVisible ( true );
                        lbl_2.setVisible ( true );
                        t_1.setDisable ( true );
                        t_1.setVisible ( false );
                        Pesquisa ( args );
                        Text_Area ( );
                   }
                   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 );
                        lbl_2.setVisible ( false );
                        textField_1.setDisable ( true );
                        textField_1.setVisible ( false );
                        text.setDisable ( true );
                        text.setVisible ( false );
                   }
                   if ( "Sair".equalsIgnoreCase ( side ) ) {
                        System.exit ( 0 );
                   }
                   root.getChildren ( ).addAll ( t_1 );
              }
         };       
     }
     // /////////////////////////////////////////////////////////////////////////
     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 void Gera_Cpf ( ) {
         Random random = new Random ( );
         for ( a = 0; a < tot; a++ ) {
              for ( i = 0; i < n; i++ ) {
                   // Geramos 10 números e inserimos no array Vet_cpf [ ]
                   Vet_cpf [ i ] = random.nextInt ( 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;
              Vet_cpf [ 10 ] = l;
              // Abaixo o cpf gerado já com seus dois últimos dígitos
              ctx.setFill ( Color.BLACK );
              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 ] );
              }
              if ( i % 11 == 0 && tot > 0 && tot <= 11 )
                   st.append ( "\n" );
              text.setText ( " " + st );
              e = 0;
              f = 0;
              g = 0;
              h = 0;
              i = 0;
              j = 0;
              l = 0;
         }
     }
     // /////////////////////////////////////////////////////////////////////////
     public static int Pesquisa ( String args ) {
         // Posiciona o local exato do textfield
         hbox_1.setPadding ( new Insets ( 43, 0, 10, 300 ) );
         // Abaixo ajustamos o total de colunas do TextField
         textField_1.setPrefColumnCount ( 2 );
         textField_1.setPromptText ( "cpf" );
         //ctx.setFont ( Font.font ( "Tahoma", FontWeight.NORMAL, 12 ) );
         textField_1.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
              @Override
              public void handle ( KeyEvent event ) {
                    bloq_textfield ( textField_1, 2 );
                   if ( event.getCode ( ) == KeyCode.ENTER ) {
                        // convertendo string para inteiro
                        tot = Integer.parseInt ( textField_1.getText ( ) );
                        if ( Integer.parseInt ( textField_1.getText ( ) ) >= 0
                                 && Integer.parseInt ( textField_1.getText ( ) ) < 12 ) {
                            Gera_Cpf ( );
                        }
                   }
              }
         } );
         ro_ot.getChildren ( ).addAll ( hbox_1 );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////////////
     public static int Text_Area ( ) {
         text.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 12 ) );
         // Largura máximo do TextArea
         text.setPrefWidth ( 180 );
         // Comprimento máxima do TextArea
         text.setPrefHeight ( 120 );
         // Adiciona o TextArea na horizontal
         grid.setHgap ( 2 );
         //Posiciona a Margem do TextArea
         grid.add ( text, 70, 2, 4, 4 );
         // Permite que o texto continue abaixo
         // iniciando um scroll quando
         // atinge o tamanho do TextArea
         text.setWrapText ( true );
         //Cor da fonte do TextArea
         text.setStyle ( "-fx-text-fill: blue" );
         // Posiciona o label na horizontal
         lbl_2.setLayoutX ( 140 );
         // Posiciona o label na vertical
         lbl_2.setLayoutY ( 50 );
         // Aplica cor no rótulo
         lbl_2.setTextFill ( Color.BLACK );
         lbl_2.setText ( "Quantos cpfs deseja gerar?" );
         return 0;
     }
     // /////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) throws Exception {
         stage.setTitle ( "JAVAFX - GERADOR 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 ( 130 );
         // Posiciona o label na vertical
         lbl.setLayoutY ( 15 );
         // Aplica cor no rótulo
         lbl.setTextFill ( Color.RED );
         lbl.setText ( "JAVAFX - GERADOR 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 );
         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.