Cómo calcular el RUT en SPSS, mediante syntax


El código verificador del Rol Único Tributario (RUT), emplea un algoritmo de verificación llamado módulo 11; o más concretamente el ‘IBM® Modulus 11 Algorithm’. Este algoritmo, basado en la aritmética modular (Paar, Pelzl, & Preneel, 2010)[1], emplea la propiedad del módulo 11 para validar la secuencia de 7 a 8 digitos del rut.

El módulo 11 de un número determinado consiste en el resto de su división por 11. Por ejemplo, el módulo 11 de 27, es 5. Esto es porque 27 es expresable como 2*11 más 5 (27=2*11+5), donde 5 es el resto de la división de 27 por 11. Los RUT validos se encuentran construidos en base a la secuencia del módulo 11. Todos los RUT validos cumplen la condición de que, el código verificador más el módulo 11 de la de la sumatoria de todos los números de RUT multiplicados por el coeficiente de posición de cada número que compone la secuencia del RUT son iguales a 11.



Para el caso de los códigos verificadores 0 y K del RUT corresponden al verificador 11 y 10 para la secuencia del RUT Chileno. En la tabla 51, se muestra el ejemplo de cálculo de código verificador para 5 RUT diferentes.

He aquí el syntax en SPSS

******************************************************************************************************************************* SEPARAR RUT y DV en dos variables.

*DADA una variable TEXTO 'RUTDV' en la cual se encuentren registrados todos los rut, con el siguiente formato
[RUT]-[DV], ó '12345678-k'; este syntax puede crear el RUT y el DV por separado .

********************************************************************** CREA espacios para variables texto.


NUMERIC blank (F1) .
STRING RUT (a20) .
STRING DV (a1) .

COMPUTE blank = INDEX(RUTDV,'-' ).
EXECUTE .
COMPUTE RUT = SUBSTR(RUTDV,1,blank-1 ).
EXECUTE .
COMPUTE DV = SUBSTR(RUTDV,blank+1 ).
EXECUTE .


********************************************************************** CONVIERTE rut extraido en numerico .

ALTER TYPE RUT (F8) .


******************************************************************************************************************************* CALCULAR los DV a partir del RUT .

COMPUTE RUTtext = RUT .
EXECUTE .

ALTER TYPE RUTtext (A8) .

STRING i8 i7 i6 i5 i4 i3 i2 i1 (A1) .
EXECUTE .

COMPUTE i8 = SUBSTR(RUTtext,1,1).
COMPUTE i7 = SUBSTR(RUTtext,2,1).
COMPUTE i6 = SUBSTR(RUTtext,3,1).
COMPUTE i5 = SUBSTR(RUTtext,4,1).
COMPUTE i4 = SUBSTR(RUTtext,5,1).
COMPUTE i3 = SUBSTR(RUTtext,6,1).
COMPUTE i2 = SUBSTR(RUTtext,7,1).
COMPUTE i1 = SUBSTR(RUTtext,8,1).
EXECUTE .

RECODE
i8 i7 i6 i5 i4 i3 i2 i1
(''=0)
('0'=0)
('1'=1)
('2'=2)
('3'=3)
('4'=4)
('5'=5)
('6'=6)
('7'=7)
('8'=8)
('9'=9) INTO
n8 n7 n6 n5 n4 n3 n2 n1 .
EXECUTE .

COMPUTE RUTtot = n8*3+n7*2+n6*7+n5*6+n4*5+n3*4+n2*3+n1*2 .
EXECUTE .

COMPUTE DVc = 11 - mod(RUTtot,11) .
EXECUTE .

ALTER TYPE DVc (F2) .

STRING DVrut (a1) .

IF(DVc = 11) DVrut = '0' .
IF(DVc = 10) DVrut = 'K' .
IF(DVc = 9) DVrut = '9' .
IF(DVc = 8) DVrut = '8' .
IF(DVc = 7) DVrut = '7' .
IF(DVc = 6) DVrut = '6' .
IF(DVc = 5) DVrut = '5' .
IF(DVc = 4) DVrut = '4' .
IF(DVc = 3) DVrut = '3' .
IF(DVc = 2) DVrut = '2' .
IF(DVc = 1) DVrut = '1' .
EXECUTE .

VARIABLE LABELS DVrut 'DV calculado a partir de RUT numerico' .


Posteenme si tienen comentarios!







[1] Paar, C., Pelzl, J., & Preneel, B. (2010). Understanding Cryptography: A Textbook for Students and Practitioners. Springer.