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 vinihhylian0103
      Boa noite, gostaria de saber tem alguma maneira de prevenir a inclusão de registros do mesmo valor na minha tabela. O código é o seguinte:
       
       
       
      <?php include_once('conexao.php'); $nome=$_POST['nome']; $sobrenome=$_POST['sobrenome']; $data=$_POST['data_nasc']; $rm=$_POST['rm']; $curso=$_POST['curso']; $email=$_POST['email']; $senha=$_POST['senha']; $sqlinsert = "insert into usuarios(nome, sobrenome, data_nasc, rm, curso, email, senha) values('$nome','$sobrenome','$data','$rm','$curso','$email','$senha')"; $resultado = @mysqli_query($conexao,$sqlinsert); if(!$resultado) { die('Query inválida: '. @mysqli_error($conexao)); } else { echo "<script type='text/javascript'>alert('Cadastro Concluído!');</script>"; header('Location: index.html'); } mysqli_close($conexao); ?>
          
       
    • By alextds
      olá gostaria de saber como fazer para obter o rank das 5 maiores vendas.
      tenho a seguinte tabela:
       
      data                 produto    valor
      31/01/2018    calça       100
      31/01/2018    calça        50
      31/01/2018    camisa    30
      31/01/2018    camisa    30
      31/01/2018    sapato     75
      31/01/2018    bermuda 100
      31/01/2018    meia         10
      31/01/2018    tenis         65
      31/01/2018    luva          20
      31/01/2018    luva          20
      31/01/2019    calça       100
      31/01/2019    calça        50
      31/01/2019    camisa    30
      31/01/2019    camisa    30
      31/01/2019    sapato    75
      31/01/2019    bermuda 100
      31/01/2019    meia         10
      31/01/2019    tenis         65
      31/01/2019    luva          20
      31/01/2019    luva          20  
       
      Preciso que totalize os valores de acordo a data e produto e que apareça somente os 5 primeiros dessa forma  :
       
      data                 produto       valor   rank
      31/01/2018    calça           150      1
      31/01/2018    bermuda    100       2
      31/01/2018    sapato        75         3
      31/01/2018    tenis            65        4
      31/01/2018    camisa        60        5
      31/01/2019    calça           150      1
      31/01/2019    bermuda     100      2
      31/01/2019    sapato         75        3
      31/01/2019    tenis             65       4
      31/01/2019    camisa         60       5
       
      Se alguém tiver uma solução facil agradeço.
       
       
    • By samuelpanamericana
      Olá Pessoal, estou com um problema com relação ao Oracle em nossas máquinas aqui! Quando tentamos acessar o SGT (sistema de gerenciamento textil) através de um usuário de rede comum sem privilégios administrativos na máquina ele apresenta o seguinte erro ERRO: "Oracle não instalado ou seu caminho é inválido. Consulte o seu superior [\Bin\ORA803.dll]" Código de erro 803 O usuário não tem acesso ao Oracle Path por ser um usuário comum sem privilégios administrativos, devido a problemas de segurança não queremos deixar os usuários com privilégios administrativos evitando assim problemas com a alteração e instalação de programas, abrimos esse tópico para resolver este problema da necessidade de ser um administrador da máquina para executar o SGT, precisamos que usuários sejam comuns para acessá-lo! Confirmei que o usuário está tendo privilégios apropriados no caminho binário Oracle. Os usuários têm acesso completo ao caminho "C: \ Oracle", eu já configurei dessa maneira: Cliquei com o botão direito do mouse na pasta oracle/segurança/usuários do domínio/controle total A única maneira que nosso programa(SGT) pode encontrar a pasta oracle é definir os usuários do domínio para o grupo de administradores Porém tivemos alguns problemas ao fazer isso como por exemplo usuarios instalando programas de terceiro e efetuando alterações nas máquinas. Se alguém já passou pela mesma situação ou situação parecida eu ficaria grato se pudessem ajudar!! Atenciosamente Samuel
    • By Viniciusr9
      Script com retorno de dias uteis no mês ( desconsiderando finais de semana e feriados também ( os mesmos cadastrados em uma tabela )), ajuda!
       
      Boa tarde,
      alguém poderia me ajudar , tentei com alguns que vi pela net , fazendo alterações mas não consegui o que gostaria ainda. Preciso de um script que dado um valor (mês/ano) ele retorne a quantidade de dias uteis nesse mês, desconsiderando os sabados e domingos e os feriados listados na tabela de feriados, em Oracle Sql puro ou PL/SQL  . Agradeço pela ajuda!
×

Important Information

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