#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
main()
{   
   int opcao,erro=0;
   char resp;
   inicio:
   fflush(stdin);
   system("cls");
   printf("*==================================================================*\n");
   printf("|____ GERADOR DE NUMEROS DE CPF, CNPJ E TITULO ELEITORAL V. 1.0 ___|\n");
   printf("|                                                                  |\n");
   printf("|     Autor: Thiago C. Serrilho                                    |\n");
   printf("|     E-mail: webserrilho@gmail.com                                |\n");
   printf("|     3o. Semestre - Licenciatura em Computacao                    |\n");
   printf("|     Disciplina: Linguagem de Programacao I                       |\n");
   printf("|     Prof. Carlos Acacio                                          |\n");
   printf("*==================================================================*\n\n");
   printf("*-----------------------------*\n");
   printf("|      Menu de opcoes         |\n");
   printf("*-----------------------------*\n");
   printf("| 1 - Gerar numeros de CPF    |\n");
   printf("| 2 - Gerar Numeros de CNPJ   |\n");
   printf("| 3 - Gerar Numeros de TE     |\n");
   printf("| 4 - Finalizar programa      |\n");
   printf("*-----------------------------*\n");
   erro=0;
   do
   {
      erro++;
      if(erro>1)
      {
         printf("Erro: Opcao invalida!\n");
         erro=1;
      }
      printf("Informe a sua opcao: ");
      scanf("%d",&opcao); fflush(stdin);
   }while(opcao>4 || opcao<1);
   switch(opcao)
   {
      case 1:
      {
         system("cls");
         int numero[9],soma1,soma2,i,erro,cpf,quant;
         int parte1,parte2,parte3,dig1;
         int parte5,parte6,parte7,dig2;
         printf("*==================================================================*\n");
         printf("|________________ GERADOR DE NUMEROS DE CPF V. 1.0 ________________|\n");
         printf("|                                                                  |\n");
         printf("|     Autor: Thiago C. Serrilho                                    |\n");
         printf("|     E-mail: webserrilho@gmail.com                                |\n");
         printf("|     3o. Semestre - Licenciatura em Computacao                    |\n");
         printf("|     Disciplina: Linguagem de Programacao I                       |\n");
         printf("|     Prof. Carlos Acacio                                          |\n");
         printf("*==================================================================*\n\n");
         printf("Deseja gerar quantos numeros de CPF: ");
         scanf("%d",&quant);
         printf("*==================================================================*\n");
         //*==========================================*
         //|        Geração dos numeros do CPF        |
         //*==========================================*
         for(cpf=1;cpf<=quant;cpf++)
         {
            for(i=1;i<= 9;i++)
            {
               erro=1;
               do
               {
                  if(erro>1)
                  {
                     printf("Numero invalido.\n");
                     erro=1;
                  }
                  numero[i]=rand()%9;
                  erro++;
               }while(numero[i]>9 || numero[i]<0);     
            }
            //*==========================================*
            //|       Primeiro digito veridicador        |
            //*==========================================*
            soma1=((numero[1]*10)+
                  (numero[2]*9)+
                  (numero[3]*8)+
                  (numero[4]*7)+
                  (numero[5]*6)+
                  (numero[6]*5)+
                  (numero[7]*4)+
                  (numero[8]*3)+
                  (numero[9]*2));
            parte1=int(soma1 / 11);
            parte2=(parte1 * 11);
            parte3=(soma1 - parte2);
            dig1=(11 - parte3);
            if(dig1>9)dig1=0;
            //*==========================================*
            //|        Segundo digito veridicador        |
            //*==========================================*
            soma2=((numero[1]*11)+
                  (numero[2]*10)+
                  (numero[3]*9)+
                  (numero[4]*8)+
                  (numero[5]*7)+
                  (numero[6]*6)+
                  (numero[7]*5)+
                  (numero[8]*4)+
                  (numero[9]*3)+
                  (dig1*2));
            parte5=int(soma2 / 11);
            parte6=(parte5 * 11);
            parte7=(soma2 - parte6);
            dig2=(11 - parte7);
            if(dig2>9)dig2=0;
            //*==========================================*
            //|       Impressao do numero completo       | 
            //*==========================================*
            for(i=1;i<=9;i++)
            {
               printf("%d",numero[i]);
               if(i-1==2) printf(".");
               if(i-1==5) printf(".");
            }
            printf("-%d%d\n",dig1,dig2); //dois últimos digitos
            printf("*==================================================================*\n");
         }
         printf("Pressione \"enter\" para continuar...");
         getchar();
         getchar();
         break;
      }
      case 2:
      {
         system("cls");
         int numero[12],soma1,soma2,i,erro,cnpj,quant;
         int parte1,parte2,parte3,dig1;
         int parte5,parte6,parte7,dig2;
         printf("*==================================================================*\n");
         printf("|________________ GERADOR DE NUMEROS DE CNPJ V. 1.0 _______________|\n");
         printf("|                                                                  |\n");
         printf("|     Autor: Thiago C. Serrilho                                    |\n");
         printf("|     E-mail: webserrilho@gmail.com                                |\n");
         printf("|     3o. Semestre - Licenciatura em Computacao                    |\n");
         printf("|     Disciplina: Linguagem de Programacao I                       |\n");
         printf("|     Prof. Carlos Acacio                                          |\n");
         printf("*==================================================================*\n\n");
         printf("Deseja gerar quantos numeros de CNPJ: ");
         scanf("%d",&quant);
         printf("*==================================================================*\n");
         //*==========================================*
         //|       Geração dos numeros do CNPJ        |
         //*==========================================*
         for(cnpj=1;cnpj<=quant;cnpj++)
         {
            for(i=1;i<=8;i++)
            {
               numero[i]=rand()%9;
            }
            numero[9]=0;
            numero[10]=0;
            numero[11]=0;
            numero[12]=rand()%9;
            //*==========================================*
            //|       Primeiro digito veridicador        |
            //*==========================================*
            soma1=((numero[1]*5)+
                  (numero[2]*4)+
                  (numero[3]*3)+
                  (numero[4]*2)+
                  (numero[5]*9)+
                  (numero[6]*8)+
                  (numero[7]*7)+
                  (numero[8]*6)+
                  (numero[9]*5)+
                  (numero[10]*4)+
                  (numero[11]*3)+
                  (numero[12]*2));
            parte1=int(soma1 / 11);
            parte2=(parte1 * 11);
            parte3=(soma1 - parte2);
            dig1=(11 - parte3);
            if(dig1>9)dig1=0;
            //*==========================================*
            //|        Segundo digito veridicador        |
            //*==========================================*
            soma2=((numero[1]*6)+
                  (numero[2]*5)+
                  (numero[3]*4)+
                  (numero[4]*3)+
                  (numero[5]*2)+
                  (numero[6]*9)+
                  (numero[7]*8)+
                  (numero[8]*7)+
                  (numero[9]*6)+
                  (numero[10]*5)+
                  (numero[11]*4)+
                  (numero[12]*3)+
                  (dig1*2));
            parte5=int(soma2 / 11);
            parte6=(parte5 * 11);
            parte7=(soma2 - parte6);
            dig2=(11 - parte7);
            if(dig2>9)dig2=0;
            //*==========================================*
            //|       Impressao do numero completo       | 
            //*==========================================*
            for(i=1;i<=12;i++)
            {
               printf("%d",numero[i]);//numeros do CNPJ
               if(i==2) printf(".");//imprime um ponto depois da 2ª casa
               if(i==5) printf(".");//imprime um ponto depois da 5ª casa
               if(i==8) printf("/");//imprime uma barra depois da 8ª casa
            }
            printf("-%d%d\n",dig1,dig2); // dois últimos digitos
            printf("*==================================================================*\n");
         }
         printf("Pressione \"enter\" para continuar...");
         getchar();
         getchar();
         break;
      }
      case 3:
      {
         system("cls");
         int numero[10],soma1,soma2,i,te,quant;
         int parte1,parte2,parte3,parte4,dig1,dig2;
         printf("*==================================================================*\n");
         printf("|__________ GERADOR DE NUMEROS DE TITULO ELEITORAL V. 1.0 _________|\n");
         printf("|                                                                  |\n");
         printf("|     Autor: Thiago C. Serrilho                                    |\n");
         printf("|     E-mail: webserrilho@gmail.com                                |\n");
         printf("|     3o. Semestre - Licenciatura em Computacao                    |\n");
         printf("|     Disciplina: Linguagem de Programacao I                       |\n");
         printf("|     Prof. Carlos Acacio                                          |\n");
         printf("*==================================================================*\n\n");
         printf("Deseja gerar quantos numeros de TE: ");
         scanf("%d",&quant);
         printf("============================================\n");
         //*==========================================*
         //|        Geração dos numeros do TE         |
         //*==========================================*
         for(te=1;te<=quant;te++)
         {
            for(i=1;i<=8;i++)
            {
                 numero[i]=rand()%9;
                 numero[9]=rand()%2;
                 numero[10]=rand()%8;
            }
            //*==========================================*
            //|       Primeiro digito veridicador        |
            //*==========================================*
            soma1=((numero[1]*2)+
                  (numero[2]*3)+
                  (numero[3]*4)+
                  (numero[4]*5)+
                  (numero[5]*6)+
                  (numero[6]*7)+
                  (numero[7]*8)+
                  (numero[8]*9));
            parte1=int(soma1 / 11);
            parte2=(parte1 * 11);
            dig1=(soma1 - parte2);
            if(dig1>9)dig1=0;
            //*=========================================*
            //|       Segundo digito verificador        |
            //*=========================================*
            soma2=((numero[9]*7)+
                  (numero[10]*8)+
                  (dig1*9));
            parte3=int(soma2 / 11);
            parte4=(parte3 * 11);
            dig2=(soma2 - parte4);
            if(dig2>9)dig2=0;
            //*==========================================*
            //|       Impressao do numero completo       | 
            //*==========================================*
            for(i=1;i<=10;i++)
            {
               printf("%d",numero[i]);
               if(i==4) printf(" "); //imprime um espaço apos a 4ª casa
               if(i==8) printf(" "); //imprime um espaço apos a 8ª casa
            }
            printf("%d%d\n",dig1,dig2); //dois últimos digitos
            printf("============================================\n");
         }
         printf("Pressione \"enter\" para continuar...");
         getchar();
         getchar();
         break;
      }
      case 4:
      {
         printf("Deseja continuar no programa (s/n)? ");
         scanf("%s",&resp);
         if((resp=='n') || (resp=='N')) goto fim;
         else goto inicio;
      }
   }
   goto inicio;
   fim:;
}