Rol Único Tributario
El Rol Único Tributario, conocido también por el acrónimo RUT, es un número único chileno, que fue establecido como identificación tributaria por el Decreto con Fuerza de Ley N° 3 del 29 de enero de 1969.[1] La identificación tributaria anterior era el Rol General de Contribuyentes (1959-1969).
La asignación del Rol respectivo está a cargo de dos organismos estatales, según la naturaleza del asignatario:para los campesinos del sena
- Todas las personas naturales, nacionales o extranjeras, reciben un Rol Único Nacional (RUN) otorgado por el Servicio de Registro Civil e Identificación, este mismo número también servirá de identificador ante el Servicio de Impuestos Internos y ante todo otro organismo del Estado;
- Las personas jurídicas, en cambio, deben efectuar el trámite de Inicio de Actividades ante el Servicio de Impuestos Internos, mediante el cual éste asignará un RUT, este mismo número servirá como identificador de la entidad ante todos los organismos del Estado;
El formato del RUT es igual al del RUN, por lo tanto, obedece a la forma XX.XXX.XXX - Y.
Tanto el RUT como el RUN son personalísimos e intransferibles, por lo tanto:
- Un mismo Rol solamente será asignado a una persona determinada, sea natural o jurídica;
- Un titular de RUN o RUT mantendrá el mismo Rol durante toda su existencia legal,
- Terminada la existencia legal del titular de RUN o RUT, nunca es vuelto a asignar.
Índice |
Algoritmo [editar]
El algoritmo para obtener el dígito verificador corresponde al método para validar el RUN o RUT. El Rol Único Nacional (RUN) y el Rol Único Tributario (RUT) chilenos (ambos coinciden en el RUN si se trata de personas naturales) poseen un dígito verificador que evita engaños y suplantaciones de identidad.
El dígito verificador se obtiene a partir de un algoritmo conocido como Módulo 11. Existen otras maneras de obtener el dígito verificador de los números de identificación del mundo, pero en Chile se aplica exclusivamente el Módulo 11. El Módulo 11 consiste en la aplicación de operaciones aritméticas a cada dígito del número del RUT.
Procedimiento para obtener el dígito verificador [editar]
El RUT consta de dos partes, el número y el dígito verificador separados por un guion. En el siguiente ejemplo se toma como RUT el número 30.686.957-X, donde 30.686.957 es el número del RUT y X es el dígito verificador que no conocemos o que queremos verificar:
- Se procede a tomar el número de RUT de derecha a izquierda, multiplicando cada dígito por los números que componen la serie numérica 2,3,4,5,6,7; y sumando el resultado de estos productos, como se muestra a continuación (si se ha aplicado la serie hasta el 7 y quedan dígitos por multiplicar, se comienza la serie nuevamente):DOS VECES
En el ejemplo:
7 × 2 = 14,
5 × 3 = 15,
9 × 4 = 36,
6 × 5 = 30,
8 × 6 = 48,
6 × 7 = 42,
0 × 2 = 0,
3 × 3 = 9, entonces la suma de los productos es: 14+15+36+30+48+42+0+9 = 194
- Al número obtenido por la suma del producto de cada dígito por la serie ya mencionada, se le aplica módulo 11, o sea, se divide por 11 y se determina el resto de la división.
En el ejemplo:
194: 11 = 17
Resto: 7
Ahora a 11 se le resta el resto:
En el ejemplo:
11 - 7 = 4
- Si el resultado es 11, el dígito verificador será 0.
- Si el resultado es 10, el dígito verificador será K.
- En otro caso el resultado será el dígito verificador.
Como en el ejemplo el resultado de la resta es 4, el dígito verificador es 4.
Por ende, el RUT del ejemplo es el 30.686.957-4.
Ejemplos [editar]
Public Function RutDigito(ByVal Rut As Long) As String Dim Digito As Integer Dim Contador As Integer Dim Multiplo As Integer Dim Acumulador As Integer Contador = 2 Acumulador = 0 While Rut <> 0 Multiplo = (Rut Mod 10) * Contador Acumulador = Acumulador + Multiplo Rut = Rut \ 10 Contador = Contador + 1 If Contador > 7 Then Contador = 2 End If Wend Digito = 11 - (Acumulador Mod 11) RutDigito = CStr(Digito) If Digito = 10 Then RutDigito = "K" If Digito = 11 Then RutDigito = "0" End Function
NOTA: Este mismo código sin ninguna modificación también funciona en Openoffice.org
private string digitoVerificador(int rut) { int Digito; int Contador; int Multiplo; int Acumulador; string RutDigito; Contador = 2; Acumulador = 0; while (rut != 0) { Multiplo = (rut % 10) * Contador; Acumulador = Acumulador + Multiplo; rut = rut/10; Contador = Contador + 1; if (Contador == 8) { Contador = 2; } } Digito = 11 - (Acumulador % 11); RutDigito = Digito.ToString().Trim(); if (Digito == 10 ) { RutDigito = "K"; } if (Digito == 11) { RutDigito = "0"; } return (RutDigito); } } } /// Una versión mas corta public static string Dv(string r) { int suma = 0; for (int x = r.Length - 1; x >= 0; x--) suma += int.Parse(char.IsDigit(r[x])?r[x].ToString():"0") * (((r.Length - (x + 1)) % 6) + 2); int numericDigito = (11 - suma % 11); string digito = numericDigito == 11 ? "0" : numericDigito == 10 ? "K" : numericDigito.ToString(); return digito; } /// Una versión funcional: http://bit.ly/14Q83iv public static char GenerarDV (int num) { return "0K987654321" [ Enumerable.Range (0, (int) Math.Floor (Math.Log10 (num)) + 2) .Select (i => ((i % 6) + 2) * ((num / (int) Math.Pow (10, i)) % 10)) .Sum () % 11]; }
#!/usr/bin/perl6
my ($RUT, @RUT, $digito);
$RUT = @*ARGS; # leemos el argumento pasado al programa
@RUT = $RUT.split('').reverse; # lo pasamos a array y le damos la vuelta
$digito = [+](@RUT <<*>> (2..7)); # cálculo del dígito verificador
$digito = 11 - $digito % 11;
$digito = ( 0 .. 9, 'K', 0 )[$digito];
say "$RUT-$digito"; # salida
dv = function(T) { var M=0,S=1; for(;T;T=Math.floor(T/10)) S=(S+T%10*(9-M++%6))%11; return S?S-1:'K'; } alert('El digito verificador del rut ingresado es '+ dv(prompt('Ingrese rut para mostrar su digito verificador:')));
NOTA: Este mismo código sin ninguna modificación también funciona en Openoffice.org
function dv($r){ $s=1; for($m=0;$r!=0;$r/=10) $s=($s+$r%10*(9-$m++%6))%11; echo 'El digito verificador del rut ingresado es ',chr($s?$s+47:75); }
CREATE FUNCTION RutDigito (@Rut as integer) RETURNS varchar(1) AS BEGIN declare @Digito as integer declare @Contador as integer declare @Multiplo as integer declare @Acumulador as integer declare @retorno as varchar(1) set @Contador = 2 set @Acumulador = 0 WHILE @Rut <> 0 BEGIN set @Multiplo = (@Rut % 10) * @Contador set @Acumulador = @Acumulador + @Multiplo set @Rut = @Rut / 10 set @Contador = @Contador + 1 If @Contador > 7 set @Contador = 2 END set @Digito = 11 - (@Acumulador % 11) select @retorno = case when @Digito = 10 then 'K' when @Digito = 11 then '0' else cast(@Digito as varchar(1)) end return @retorno END
r=input('Ingrese rut:'); a=floor(r/10^7); b=floor(r/10^6)-(10*a); c=floor(r/10^5)-(100*a+10*b); d=floor(r/10^4)-(10^3*a+100*b+10*c); e=floor(r/10^3)-(10^4*a+10^3*b+100*c+10*d); f=floor(r/10^2)-(10^5*a+10^4*b+10^3*c+100*d+10*e); g=floor(r/10^1)-(10^6*a+10^5*b+10^4*c+10^3*d+100*e+10*f); h=r-(10^7*a+10^6*b+10^5*c+10^4*d+10^3*e+100*f+10*g); sum=h*2+g*3+f*4+e*5+d*6+c*7+b*2+a*3; resto=sum-floor(sum/11)*11; verif=11-resto; disp('El numero verificador es:') if (verif<10) disp(verif) end if (verif==11) disp('0') end if (verif==10) disp('K') end
Proceso digito_verificador
Definir rut, a1, pa, c, sum, di, digi Como Enteros;
Escribir "Este programa define su dígito verificador ";
Escribir "Ingrese su rut sin el dígito verificador ";
Leer rut;
pa<-rut;
c<-2;
sum<-0;
Mientras rut>0 Hacer
a1<-rut%10;
rut<-trunc(rut/10);
sum<-sum+(a1*c);
c<-c+1;
Si c=8 Entonces
c<-2;
FinSi
FinMientras
di<-sum%11;
digi<-11-di;
Si digi=11 Entonces
Escribir "El dígito verificador es 0";
Escribir pa,"-0";
Sino
Si digi=10 Entonces
Escribir "El dígito verificador es K";
Escribir pa,"-K";
Sino
Escribir "El dígito verificador es ",digi;
Escribir pa,"-",digi;
FinSi
FinSi
FinProceso
def digito_verificador(rut): value = 11 - sum([ int(a)*int(b) for a,b in zip(str(rut).zfill(8), '32765432')])%11 return {10: 'K', 11: '0'}.get(value, str(value))
def digito_verificador(rut) total = rut.to_s.rjust(8,'0').split(//).zip(%w(3 2 7 6 5 4 3 2)).collect{|a,b| a.to_i*b.to_i}.inject(:+) (11 - total % 11).to_s.gsub(/10/,'k').gsub(/11/,'0') end
public static boolean ValidarRut(int rut, char dv)
{
int m = 0, s = 1;
for (; rut != 0; rut /= 10)
{
s = (s + rut % 10 * (9 - m++ % 6)) % 11;
}
return dv == (char) (s != 0 ? s + 47 : 75);
}
Referencias [editar]
- ↑ «CREA EL ROL UNICO TRIBUTARIO Y ESTABLECE NORMAS PARA SU APLICACIÓN» (1969). Consultado el 9 de Octubre de 2012.