March 28, 2024

Validação de CPF / CNPJ

Certo Zombizada?!

Essa é para a garotada que se mata convertendo função de JavaScript para ABAP. (pior que ja vi) 

 

Por favor, menino Zombie, use as funções:

CONVERSION_EXIT_CPFBR_INPUT – Validar CPF

CONVERSION_EXIT_CGCBR_INPUT – Validar CNPJ

Abraços a todos, força anti-zumbie.

 

 

Mauro Laranjeira

Motoqueiro fantasma... curandeiro do SAP desde 2006... trago o go-live perdido em um fim de semana... junto 9 mulheres para fazer um filho em um mês... acreditador em histórias de Basis... garimpeiro de dados de teste...

View all posts by Mauro Laranjeira →

13 thoughts on “Validação de CPF / CNPJ

  1. Essa função não valida se o CPF for 11111111111, 22222222222, 33333333333.
    pois eles são validos pelo modulo 11

    1. Janaina,

      Curti essa função pelo fato dela retornar o valor com mascara.

      Mas pelo que vi ela não valida CNPJ e so existe no ambiente com HR. Fiz alguns testes em ambientes sem HR e não tem mesmo.

      Vlw pela dica.

      Abs,

      Mauro Laranjeira

    1. E ae Gilson, de boas?

      O problema é que ela faz parte do pacote de HR, no meu atual projeto temos 4 ambientes diferentes da SAP, esta função não esta presente em todos.

      Porem consegui fazer alguns testes no ECC, rola mesmo.

      Vlw pela dica.

      Abs,

      Mauro Laranjeira

  2. Sei que este post é antigo, mas tenho duas maneiras de validar o CPF que podem ajudar.
    usando a função do post e também usando uma de HR.
    Fica pro registro histórico.

    Eu estou usando a versão 1 em alguns desenvolvimentos,
    porém a versão 2 é útil porque a função já formata ou tira a formatação do CPF se
    necessário, e verifica o digito na função.

    Versão 1 (Método VALIDAR_CPF):

    ASSINATURA:
    Entrada: VALUE( I_CPF ) TYPE STCD2 CPF
    Retorno: VALUE( R_ERRO ) TYPE FLAG_X Flag

    METHOD validar_cpf.

    DATA: lv_temp TYPE p,
    lv_idx TYPE sy-tabix VALUE 9,
    lv_idx1 TYPE sy-tabix,
    lv_ver TYPE c VALUE ‘0’.

    CALL FUNCTION ‘CONVERSION_EXIT_CPFBR_INPUT’
    EXPORTING
    input = i_cpf
    EXCEPTIONS
    not_valid = 1
    OTHERS = 2.

    IF sy-subrc IS NOT INITIAL.
    r_erro = ‘X’.
    EXIT.
    ENDIF.

    CHECK r_erro IS INITIAL.

    DO 10 TIMES. “Valida números repetidos
    IF i_cpf CO lv_ver .
    r_erro = ‘X’.
    EXIT.
    ENDIF.
    ADD 1 TO lv_ver.
    ENDDO.

    CHECK r_erro IS INITIAL.

    DO 2 TIMES. “Valida digitos

    CLEAR: lv_idx1, lv_temp.

    WHILE lv_idx1 = 10.
    CLEAR lv_temp.
    ENDIF.

    IF lv_temp i_cpf+lv_idx(1).
    r_erro = ‘X’.
    EXIT.
    ENDIF.

    ADD 1 TO lv_idx.
    ENDDO.

    ENDMETHOD.

    Versão 2: (REPORT ZVALIDAR_CPF)

    TYPE-POOLS: pbr99.

    PARAMETERS: cpf TYPE pbr99_cpf.

    DATA: “cpf_for TYPE pbr99_cpf,
    “cpf_raw TYPE pbr99_cpf,
    cpf_unf TYPE pbr99_cpf,
    dig TYPE n.

    START-OF-SELECTION.

    CALL FUNCTION ‘HR_BR_CHECK_CPF_FORMAT’
    EXPORTING
    cpf_number = cpf
    IMPORTING
    “cpf_number_formatted = cpf_for
    “cpf_number_raw = cpf_raw
    cpf_unformatted = cpf_unf
    EXCEPTIONS
    cpf_format_not_supported = 1
    cpf_check_digit = 2
    OTHERS = 3.

    IF sy-subrc 0.
    MESSAGE ‘Erro no CPF’ TYPE ‘S’ DISPLAY LIKE ‘E’.
    LEAVE LIST-PROCESSING.
    ELSE.
    DO 10 TIMES.
    IF cpf_unf(11) CO dig.
    MESSAGE ‘Erro no CPF’ TYPE ‘S’ DISPLAY LIKE ‘E’.
    LEAVE LIST-PROCESSING.
    ENDIF.
    ADD 1 TO dig.
    ENDDO.
    ENDIF.

    1. Eduardo,

      Obrigado por sua contribuição o post é antigo mas sempre ajuda. 😉

      Para colocar a formatação também temos a função de output (CONVERSION_EXIT_CPFBR_OUTPUT).

      Muito obrigado

      1. Muito bom, fui ajudar um colega agora e apesar de antigo, já se tornou atual de novo! heheeheh

        Obrigada

  3. Usei o domínio J_1BCPF direto na estrutura do ALV, para fazer as conversoes de input e output automaticamente na saída do ALV, porém, na saída do ALV o campo apresenta o seguinte formato:

    137.269.330-18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

    Alguém poderia me ajudar a como exibir somente o CPF sem os zeros a direita?

Leave a Reply

Your email address will not be published. Required fields are marked *