Dicas ABAP

Published on December 17th, 2012 | by Mauro Laranjeira

10

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.

 

 

Tags: , ,


About the Author

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...



10 Responses to Validação de CPF / CNPJ

  1. Alexandre Alves says:

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

  2. Janaina says:

    Essa função é a mais completa.
    HR_BR_CHECK_CPF_FORMAT

    • 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

  3. Gilson says:

    Maurão, para CNPJ tem a função HR_BR_CHECK_CGC_FORMAT

    • 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

  4. Eduardo Henrique says:

    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.

    • 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

Leave a Reply

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

Back to Top ↑