Inicio > ABAP/4 > Función para validar RUT (Documento de Identidad en Chile)

Función para validar RUT (Documento de Identidad en Chile)

Caso: se busca crear una función que valide el RUT de una persona/empresa

Solución: se crea la siguiente función:

FUNCTION zvalidar_rut.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(KUNNR) TYPE  ICNUM
*"  EXPORTING
*"     REFERENCE(RESP) TYPE  SY-SUBRC
*"     REFERENCE(RUTHIGH) TYPE  ICNUM
*"     REFERENCE(RUTLOW) TYPE  ICNUM
*"     REFERENCE(RINGLOW) TYPE  ICNUM
*"----------------------------------------------------------------------
 
  DATA: rut      TYPE char50, 
		rut_aux  TYPE char50, 
		rut_cort TYPE char50,
		dv(01)   TYPE c, dv_aux TYPE c,
		nmax     TYPE i, nroc TYPE i,
		suma     TYPE i, contador TYPE i,
		long     TYPE i,
		kunnr2   TYPE kna1_bf-stcd1.
 
  rut = kunnr.
  TRANSLATE rut USING '- '.
  CONDENSE rut NO-GAPS.
 
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
*     input  = kunnr
      input  = rut
    IMPORTING
      output = rut.
 
  long =  STRLEN( rut ).
 
  IF long = 8.
    CONCATENATE rut+0(7) '-' rut+7(8) INTO rut.
  ENDIF.
 
  IF long = 9.
    CONCATENATE rut+0(8) '-' rut+8(9) INTO rut.
  ENDIF.
 
  TRANSLATE rut TO UPPER CASE. CONDENSE rut NO-GAPS.
 
  * Quito caracteres no correspondientes
  long = STRLEN( rut ). contador = 0. resp = 0.
  IF long < 2.
    resp = 4.
  ENDIF.
  CHECK long >= 2.
  DO long TIMES.
    IF rut+contador(01) CO '0123456789Kk'.
      CONCATENATE rut_aux rut+contador(01) INTO rut_aux.
      ringlow = rut_aux.
    ENDIF.
    ADD 1 TO contador.
  ENDDO.
 
  rut = rut_aux. CONDENSE rut NO-GAPS.
 
  IF NOT ( rut IS INITIAL ).
    long = STRLEN( rut ). long = long - 1.
    dv = rut+long(1). nmax = long - 1.
    rut_aux = rut+0(long).
    contador = 2.
    DO long TIMES.
      nroc = rut_aux+nmax(01).
      suma = suma + ( nroc * contador ).
      nmax = nmax - 1. contador = contador + 1.
      IF contador > 7. contador = 2. ENDIF.
    ENDDO.
    suma = 11 - suma MOD 11.
    IF suma = 10.
      dv_aux = 'K'.
    ELSEIF suma > 10.
      dv_aux = '0'.
    ELSE.
      dv_aux = suma.
    ENDIF.
    IF dv NE dv_aux.
      resp = 4.
    ENDIF.
  ELSE.
    resp = 4. "Incorrecto.
  ENDIF.
  CONCATENATE rut_aux '-' dv_aux INTO ruthigh.
  CONCATENATE rut_aux dv_aux INTO rutlow.
 
* Validar Guión XL ( ALT 196 )
* Validar Rut contenga caracteres válidos
 
  kunnr2 = kunnr.
 
  CALL FUNCTION 'TAX_NUMBER_CHECK'
         EXPORTING
           country                  = 'CL'
*          NATURAL_PERSON_FLAG      = 'X'
*          REGION                   = ' '
*          STKZU                    = ' '
          tax_code_1                = kunnr2
*         TAX_CODE_2                = ' '
*         TYPE_OF_TAX_CODE_1        = ' '
*         TAX_CODE_3                = ' '
*         TAX_CODE_4                = ' '
        EXCEPTIONS
          not_valid                 = 1
          different_fprcd           = 2
          OTHERS                    = 3
                 .
  IF sy-subrc <> 0.
    resp = 4.
  ENDIF.
 
* Validar como máximo 10 caracteres
  long =  STRLEN( kunnr ).
 
  IF long > 10.
    resp = 4.
  ENDIF.
 
ENDFUNCTION.
  1. 31/07/2015 a las 18:15

    Como insertas código abap en ese formato?

  2. Rene
    03/12/2015 a las 15:33

    Excelente estimado…. muchas gracias !!!!

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: