Jump to content
Carolm

Validação de CNPJ com PL/SQL

Recommended Posts

Boa Noite, tenho que solucionar um exercício de PL/SQL ,onde devo encontrar um algorítimo/código para poder analisar um CNPJ ,que sera informado pelo usuário,o SQL Developer deve realizar o cálculo para pegar os dígitos validadores desse CNPJ, e por fim analisar se ele é válido ou inválido e no console apresentar o texto : Valido ou inválido dependendo do resultado obtido com o calculo!

Nesse exercício sera aberta uma "tela" que vai pedir pro usuário digitar o numero do CNPJ,esse CNPJ sera capturado e analisado através de um calculo de validação de CNPJ (ira analisar os dígitos verificadores) e com o resultado ele ira informar ao usuário se o numero é VALIDO ou INVALIDO!

Enunciado :

CRIE UM BLOCO ANÔNIMO PL/SQL  ORACLE  QUE IRÁ SOLICITAR PARA O USUÁRIO O NÚMERO DO: CNPJ - BLOCO ANÔNIMO-DÍGITO VERIFICADOR

Eu rodei o código abaixo  o SQL informou que a função foi compilada,porém não aparece a mensagem dizendo se o numero informado é válido ou inválido...Será que poderiam me ajudar ?

set serveroutput on

ACCEPT CNPJ PROMPT 'Digite o numero do CNPJ'
CREATE OR REPLACE FUNCTION CNPJ
      (p_cgc     IN CHAR)
       RETURN    BOOLEAN
IS
     m_total     NUMBER   :=  0;
     m_digito    NUMBER   :=  0;
BEGIN
     FOR i IN 1..4 LOOP
         m_total := m_total + substr(p_cgc,i,1) * (6 - i);
     END LOOP;

     FOR i IN 5..12 LOOP
         m_total := m_total + substr(p_cgc,i,1) * (14 - i);
     END LOOP;

     m_digito := 11 - mod(m_total,11);

     IF m_digito > 9 THEN
        m_digito := 0;
     END IF;

     IF m_digito != substr(p_cgc,13,1) THEN
        RETURN FALSE;
     END IF;

     m_digito := 0;
     m_total  := 0;

     FOR i IN 1..5 LOOP
         m_total := m_total + substr(p_cgc,i,1) * (7 - i);
     END LOOP;

     FOR i IN 6..13 LOOP
         m_total := m_total + substr(p_cgc,i,1) * (15 - i);
     END LOOP;

     m_digito := 11 - mod(m_total,11);

     IF m_digito > 9 THEN
        m_digito := 0;
     END IF;

    IF m_digito != substr(p_cgc,14,1) THEN
        RETURN FALSE;
     END IF;

     RETURN TRUE;
     
     
    IF CNPJ(14) = TRUE
  THEN 
      DBMS_OUTPUT.PUT_LINE('VERDADEIRO');
  ELSE 
     
      DBMS_OUTPUT.PUT_LINE('FALSO');
  END IF;

END;
/

 

bar.jpg

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By asacap1000
      Olá galera estou quebrando a cabeça aqui e não sei mais o que fazer. Estamos migrando nossa intranet que estava desatualizada demais e estamos colocando toda ela em php7.3.
      Dentro desse sistema temos varias consultas que são realizadas no Oracle. As consultas estão ocorrendo 100% mas ao chegar na plataforma de relatórios travou tudo. Não consegui acertar o meio de consultar por período, já utilizei "to_date, to_char, trunc" e nada. Interessante que no PLSQL o to_date funciona certo
      SELECT DISTINCT TO_DATE(IO.TIME_ARRIVAL)
        FROM IN_OUT IO
       WHERE TO_DATE(IO.TIME_ARRIVAL) BETWEEN '01/11/2021' AND '23/11/2021'
       
      1    04/11/2021
      2    18/11/2021
      3    17/11/2021
      4    14/11/2021
      5    22/11/2021
      6    08/11/2021
      7    11/11/2021
      8    13/11/2021
      9    09/11/2021
      10    10/11/2021
      11    05/11/2021
      12    19/11/2021
      13    15/11/2021
      14    03/11/2021
      15    06/11/2021
      16    23/11/2021
      17    01/11/2021
      18    02/11/2021
      19    16/11/2021
      20    20/11/2021
      21    12/11/2021
      22    21/11/2021
       
      Se eu utilizar ele ignora a data que estabeleci para a consulta
       TO_CHAR(IO.TIME_ARRIVAL,'DD/MM/YYYY') BETWEEN '01/11/2021' AND '23/11/2021'
       
      1    03/07/2013
      2    05/07/2013
      3    18/06/2013
      4    21/05/2013
      5    20/05/2013
      6    12/08/2013
      7    21/08/2013
      8    23/08/2013
      9    02/09/2013
      10    12/09/2013
       
      Isso no PLSQL, no caso do PHP o to_date não funciona nem gera o relatório, e no to_char funciona mas ignorando as datas apontadas.
       
      O que dá pra  fazer pra resolver isso, tenho que finalizar essa migração até final de Dezembro e estou começando a ficar preocupado com o tempo
       
      Agradeço qualquer ajuda que vier
    • By EVERTONERP
      select 
      EP.nrCNPJ                        AS CNPJ,    
      PV.nrNSU                         AS NSU, 
      convert(CHAR,PC.dtPagamento,103) AS Data_de_Pagamento,
      BD.idBandeira                    AS Codigo_Bandeira,
      BD.dsBandeira                    AS Descrição_Bandeira, 
      PC.vlPago                        AS Valor_do_Pagamento,
      PC.nrParcela                     AS Quantidade_de_Parcelas, 
      FP.dsFormaPagamento              AS Forma_Pagamento,
      ST.dsStatusParcela               AS Descrição_Status_Parcela 
      from card.tbEmpresa        AS EP
      LEFT JOIN card.tbPagamentoVenda AS PV ON EP.idEmpresa = PV.idEmpresa
      LEFT JOIN card.tbParcela        AS PC ON PV.idPagamentoVenda = PC.idPagamentoVenda
      LEFT JOIN card.tbBandeira       AS BD ON BD.idBandeira = PV.idBandeira
      LEFT JOIN card.tbFormaPagamento AS FP ON FP.idFormaPagamento = PC.idEmpresa
      LEFT JOIN card.tbMovimentoBanco AS MB ON MB.idMovimentoBanco = PC.idMovimentoBanco
      LEFT JOIN card.tbStatusParcela  AS ST ON ST.IdStatusParcela = PC.idStatusParcela
      GROUP BY card.tbBandeira.dsBandeira
      ---------------------#--------------------------------
      Mensage de erro ao rodar a query
      Mensagem 4104, Nível 16, Estado 1, Linha 19
      O identificador de várias partes "card.tbBandeira.dsBandeira" não pôde ser associado.
    • By joeythai
      Boa tarde rapaziada,
       
      Criei uma procedure que está trazendo os dados certinhos com exceção de uma coluna(Caminho do Arquivo) está cortando o nome do arquivo que salvo lá. O código é esse:
       
      <code>
      CREATE PROCEDURE dbo.clientes2 @Produto_ID INT = NULL, @Comprador_ID INT = NULL, @NM_Token NVARCHAR(MAX) = NULL, @DocumentoTipo INT = NULL, @NM_CPF CHAR(20) = NULL, @Teste INT = 0 AS   SET @Produto_ID = ISNULL(@Produto_ID, 0); SET @Comprador_ID = ISNULL(@Comprador_ID, 0); SET @NM_Token = RTRIM(LTRIM( ISNULL(@NM_Token, '') )); SET @DocumentoTipo = ISNULL(@DocumentoTipo, 0); SET @NM_CPF = RTRIM(LTRIM(@NM_CPF)); SET @Teste = ISNULL(@Teste, 1);   IF(@Teste = 1) BEGIN   IF(ISNULL(@Comprador_ID,0) > 0 AND @Produto_ID > 0)   BEGIN SELECT cliente.ID, cliente.Produto_ID, cliente.Carro_ID, cliente.Coligacao_ID, cliente.Cliente_ID, cliente.Deposito_ID, cliente.DocumentoTipo, CAST(cliente.NM_Arquivo AS nvarchar) as NM_Arquivo, CAST(cliente.NM_Token AS nvarchar) as NM_Token, cliente.NM_Responsavel, cliente.Data_BR, compradores.ID FROM Cliente cliente WITH (NOLOCK) INNER JOIN Produto produto WITH (NOLOCK) ON produto.ID = cliente.Produto_ID INNER JOIN Compradores compradores WITH (NOLOCK) ON compradores.ID = produto.Comprador_ID WHERE compradores.ID = @Comprador_ID AND cliente.Produto_ID = @Prodtuo_ID AND cliente.DocumentoTipo = @DocumentoTipo; END   END   ELSE BEGIN   IF(ISNULL(@Comprador_ID,0) > 0 AND @Produto_ID > 0)   BEGIN SELECT cliente.*, compradores.ID FROM Cliente cliente WITH (NOLOCK) INNER JOIN Produto produto WITH (NOLOCK) ON produto.ID = cliente.Produto_ID INNER JOIN Notas notas WITH (NOLOCK) ON notas.ID = produto.NVenda_ID INNER JOIN Compradores compradores WITH (NOLOCK) ON compradores.ID = notas.Comprador_ID WHERE compradores.ID = @Comprador_ID AND cliente.Produto_ID = @Produto_ID AND cliente.DocumentoTipo = DocumentoTipo; END   END   RETURN; </code>
       
      faço um join na tabela clientes, esse campo é de lá, e na tabela clientes o caminho do arquivo está salvo certinho, completo com o nome do arquivo.
      Alguem tem alguma ideia do que está errado ?
    • By Thiago Duarte
      Eu tenho uma página que abri um alert ao clicar no link , só que nao cadastra e nem funciona o login.
       
       <div class="btn-box">          <a class="btn btn-color venobox vbox-item" data-toggle="modal" href="javascript:void(0)" onclick="openRegisterModal();">Start now Free </a>             <img src="images/seta.png"> </div>  
      <div class="modal-body">                               <div class="box">                                  <div class="content">                                     <!-- Login Form -->                                     <div class="loginBox">                                        <form id="login-modal" role="form"  method="post" action="#">                                           <input type="hidden" name="param" value="logar" />                                           <!-- Success/Alert Notification -->                                           <p class="lm-success"><i class="icon icon_check_alt2"></i> <strong>Congratulation! Login modal validation is working. Implement your code.</strong></p>                                           <p class="lm-failed"><i class="icon icon_close_alt2"></i><strong> Something went wrong! Insert correct value.</strong></p>                                           <!-- Input Fields -->                                           <input id="lm-email" class="form-control input-lg" type="text" placeholder="Email" name="email" required="">                                           <input id="lm-password" class="form-control input-lg" type="password" placeholder="Password" name="senha" required="">                                           <!-- Login Button -->                                           <input type="submit" class="btn btn-color" value="Login">                                           <!-- <button class="btn btn-color">Login</button> -->                                        </form>                                     </div>                                     <!-- /End Login Form -->                                  </div>                               </div>                               <!-- /End Login Form Box -->                               <div class="box">                                  <!-- Signup Form -->                                  <div class="content registerBox" style="display:none;">                                     <form id="signup-modal" role="form" method="post" action="?go=cadastrar">                                        <!-- Success/Alert Notification -->                                        <p class="sm-success"><i class="icon icon_check_alt2"></i> <strong>Congratulation! Signup modal validation is working. Implement your code.</strong></p>                                        <p class="sm-failed"><i class="icon icon_close_alt2"></i><strong> Something went wrong! Insert correct value.</strong></p>                                        <!-- Input Fields -->                                        <input id="sm-email" class="form-control input-lg" type="text" placeholder="Email" name="email" required="">                                        <input id="sm-password" class="form-control input-lg" type="password" placeholder="password" name="password">                                        <input id="sm-confirm" class="form-control input-lg" type="password" placeholder="Repeat password" name="senha-confirm">                                        <!-- Signup Button -->                                        <!--  <button class="btn btn-color">Create an account</button> -->                                        <input type="submit" class="btn btn-color" value="Create an account">                                     </form>                                  </div>                                  <!-- /End Signup Form -->                               </div>                               <!-- /End Signup Form Box -->                            </div>  
      e em baixo do </html> coloquei
        <?php           $param = (empty($_POST['param'])) ? 'error' : $_POST['param'];           if($param == 'logar'){       //if($_POST['param'] == 'logar'){             $email = $_POST['email'];             $password = $_POST['password'];             $query1 = mysql_num_rows(mysql_query("SELECT * FROM usuario WHERE email = '$email' AND password = '$password'")) or die(mysql_error());             if($query1 == 1){           // print "<script>alert('logou');</script>";              print "<script>window.location.replace('dashboard/index.php');</script>";           }else{              echo "<script>alert('User and password do not match.'); history.back();</script>";           }        }        if(@$_GET['go'] == 'cadastrar'){           // $dominio_gratis = $_POST['dominio_gratis'];          $email = $_POST['email'];          $password = $_POST['password'];          $date_register = date("m-d-Y");                // if(empty($dominio_gratis)){           //     echo "<script>alert('Preencha todos os campos para se cadastrar.'); history.back();</script>";           // }else          if(empty($email)){           echo "<script>alert('Fill in all the fields to register.'); history.back();</script>";            }elseif(empty($password)){           echo "<script>alert('Fill in all the fields to register.'); history.back();</script>";        }else{           $query1 = mysql_num_rows(mysql_query("SELECT * FROM usuario WHERE email = '$email'"));           if($query1 == 1){            echo "<script>alert('User already exists.'); history.back();</script>";          }else{            mysql_query("insert into usuario (email, password, date_register, plan) values ('$email','$password','$date_register', '0')");            header("Location: dashboard/dashboard.php");         }      }   }   ?>  
      Alguem pode ajudar?
    • By ldblucas
      Boa tarde,
       
      Atualmente qual a melhor formar de fazer um conexao C# com o banco Oracle ?
       
       
       
      desde já agradeço
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.