fork(2) download
  1. import java.util.ArrayList;
  2.  
  3. import javax.swing.text.MaskFormatter;
  4.  
  5. class GeraCPF {
  6. private ArrayList<Integer> listaAleatoria = new ArrayList<Integer>();
  7. private ArrayList<Integer> listaNumMultiplicados = null;
  8.  
  9. //Metodo para geracao de um numero aleatorio entre 0 e 9
  10. public int geraNumAleatorio(){
  11. //Note que foi preciso fazer um cast para int, ja que Math.random() retorna um double
  12. int numero = (int) (Math.random() * 10);
  13.  
  14. return numero;
  15. }
  16.  
  17. //Metodo para geracao de parte do nosso CPF (aqui geramos apenas os 9 primeiros digitos)
  18. public ArrayList<Integer> geraCPFParcial(){
  19. for(int i = 0; i < 9; i++){
  20. listaAleatoria.add(geraNumAleatorio());
  21. }
  22.  
  23. return listaAleatoria;
  24. }
  25.  
  26. //Metodo para geracao do primeiro digito verificador (para isso nos baseamos nos 9 digitos aleatorios gerados anteriormente)
  27. public ArrayList<Integer> geraPrimeiroDigito(){
  28. listaNumMultiplicados = new ArrayList<Integer>();
  29. int primeiroDigito;
  30. int totalSomatoria = 0;
  31. int restoDivisao;
  32. int peso = 10;
  33.  
  34. //Para cada item na lista multiplicamos seu valor pelo seu peso
  35. for(int item : listaAleatoria){
  36. listaNumMultiplicados.add(item * peso);
  37.  
  38. peso--;
  39. }
  40.  
  41. //Agora somamos todos os itens que foram multiplicados
  42. for(int item : listaNumMultiplicados){
  43. totalSomatoria += item;
  44. }
  45.  
  46. restoDivisao = (totalSomatoria % 11);
  47.  
  48. //Se o resto da divisao for menor que 2 o primeiro digito sera 0, senao subtraimos o numero 11 pelo resto da divisao
  49. if(restoDivisao < 2){
  50. primeiroDigito = 0;
  51. } else{
  52. primeiroDigito = 11 - restoDivisao;
  53. }
  54.  
  55. //Apos gerar o primeiro digito o adicionamos a lista
  56. listaAleatoria.add(primeiroDigito);
  57.  
  58. return listaAleatoria;
  59. }
  60.  
  61. //Metodo para geracao do segundo digito verificador (para isso nos baseamos nos 9 digitos aleatorios + o primeiro digito verificador)
  62. public ArrayList<Integer> geraSegundoDigito(){
  63. listaNumMultiplicados = new ArrayList<Integer>();
  64. int segundoDigito;
  65. int totalSomatoria = 0;
  66. int restoDivisao;
  67. int peso = 11;
  68.  
  69. //Para cada item na lista multiplicamos seu valor pelo seu peso (observe que com o aumento da lista o peso tambem aumenta)
  70. for(int item : listaAleatoria){
  71. listaNumMultiplicados.add(item * peso);
  72.  
  73. peso--;
  74. }
  75.  
  76. //Agora somamos todos os itens que foram multiplicados
  77. for(int item : listaNumMultiplicados){
  78. totalSomatoria += item;
  79. }
  80.  
  81. restoDivisao = (totalSomatoria % 11);
  82.  
  83. //Se o resto da divisao for menor que 2 o segundo digito sera 0, senao subtraimos o numero 11 pelo resto da divisao
  84. if(restoDivisao < 2){
  85. segundoDigito = 0;
  86. } else{
  87. segundoDigito = 11 - restoDivisao;
  88. }
  89.  
  90. //Apos gerar o segundo digito o adicionamos a lista
  91. listaAleatoria.add(segundoDigito);
  92.  
  93. return listaAleatoria;
  94. }
  95.  
  96. //Agora que temos nossa lista com todos os digitos que precisamos vamos formatar os valores de acordo com a mascara do CPF
  97. public String geraCPFFinal() {
  98. //Primeiro executamos os metodos de geracao
  99. geraCPFParcial();
  100. geraPrimeiroDigito();
  101. geraSegundoDigito();
  102.  
  103. String cpf = "";
  104. String texto = "";
  105.  
  106. /*Aqui vamos concatenar todos os valores da lista em uma string
  107.   Por que isso? Porque a formatacao que o ArrayList gera me impossibilitaria de usar a mascara,
  108.   pois junto com os numeros gerados ele tambem gera caracteres especias. Ex.: lista com inteiros (de 1 a 5)
  109.   [1 , 2 , 3 , 4 , 5]
  110.   Dessa forma o sistema geraria a excecao ParseException*/
  111. for(int item : listaAleatoria){
  112. texto += Integer.toString(item);
  113. }
  114.  
  115. //Dentro do bloco try.. catch.. tentaremos adicionar uma mascara ao nosso CPF
  116. try {
  117. MaskFormatter mf = new MaskFormatter("###.###.###-##");
  118. mf.setValueContainsLiteralCharacters(false);
  119. cpf = mf.valueToString(texto);
  120. } catch (Exception ex){
  121. ex.printStackTrace();
  122. }
  123. return cpf;
  124. }
  125. public static void main (String[] args) {
  126. System.out.println(new GeraCPF().geraCPFFinal());
  127. }
  128. }
Success #stdin #stdout 0.1s 320576KB
stdin
Standard input is empty
stdout
769.366.248-04