Visual Basic.NET - Digito Verificador de RUT (Uruguay)

 
Vista:
sin imagen de perfil

Digito Verificador de RUT (Uruguay)

Publicado por Gabriel Fernandez (4 intervenciones) el 20/11/2011 22:59:58
Hola a todo el mundo y ya digo gracias por la atención


Tengo una aplicación que me piden que controle el ingreso de RUT
Buscando por la web encontre su "formula" (Modulo 11) pero haciendo los calculos con RUTs reales no da bien

El RUT (en Uruguay) es XX-YYYYYY-ZZZ-V
Siendo:
x= Codigo del departamento
y= Numeros Asignados por DGI
z= Cantidad de Sucursales
v= DIGITO VERIFICADOR

Segun internet vos haces lo siguiente

Ejemplo Antel
Rut: 21-100342-001-7
Se calcula asi
Se toma los 8 digitos primero (osea X e Y)
21100342
Se da vuelta y se multiplica cada uno por el siguiente arreglo {2,3,4,5,6,7,2,3}
Lo que seria
2x2=4
4x3=12
3x4=12
0x5=0
0x6=0
1x7=7
1x2=2
2x3=6

se suman los resultados {4+12+12+0+0+7+2+6} = 43
A ese resultado se le hace Modulo de 11
43 mod 11 = 10
ahora se hace 11 menos el resultado del modulo
11-10 = 1
Miramos los casos de resultado
Si Resultado = 11 -->Digito Verificador = 1
Si Resultado = 10 -->Digito Verificador = K
Si ResultadoDistinto 11 y de 10 -->Digito Verificador = valor del modulo

En este caso seria 1 pero Antel tiene de DV un 7...
Lo mismo con Movistar (21 140634 001 1)
y si haces los calculos te da
4x2=8
3x3=9
6x4=24
0x5=0
4x6=24
1x7=7
1x2=2
2x3=6

{8+9+24+0+24+7+2+6} = 80
80 mod 11 = 3
11-3=8
Por lo que el DV tendria q ser 8 y movistar tien un 7
Por lo tanto no se que hacer porque esa formula no es tomada en cuenta

alguien me puede ayudar??

La formula esta en
http://es.wikipedia.org/wiki/C%C3%B3digo_de_control
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Digito Verificador de RUT (Uruguay)

Publicado por Juan (1 intervención) el 27/08/2012 18:35:26
Hola Gabriel.

Tu razonamiento esta bien, el arreglo que estas usando esta mal.

El arreglo tiene que ser 43298765432 si no das vuelta el nro o sino si das vuelta el nro como hiciste en tus calculos es 23456789234.

Saludos Juan Carlos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Digito Verificador de RUT (Uruguay)

Publicado por Fernando (1 intervención) el 02/01/2013 15:23:08
Tengo el mismo problema....
Juan Carlos: Te animas a explicarte un poco mas? Usamos ese arreglo contra las variables x,y ,z? Porq si no me sobran numeros....
Saludos y desde ya gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Digito Verificador de RUT (Uruguay)

Publicado por Roberto Cadena (1 intervención) el 14/02/2013 02:17:01
Hola Juan.
Mira la ponderacion debes tomarla desde el numero menos significativo, es decir el que esta mas a la derecha, y como puedo ver tu percepcion del algoritmo lo tienes muy claro, en base a eso te puedo decir que el ejemplo de "Antel" difinitivamente debe ser "1" si solo tomas "21100342", pero si tomas todo el numero "211003420017" te da "0".
Para el ejemplo de Movistar si tomas "21140634" te da "8", pero si tomas todo el numero "211406340011" te da "7".
Te dejo el codigo (JAVA) que hice para verificar los resultados:

public static int calculoCodigoControlModulo11(String numero) {
int[] digitos = new int[numero.length()];
int factor;
int suma = 0;
int modulo = 0;
int digitoVerificador = -1;
try {
factor=2;
int total = digitos.length-1;
for (int i = total; i >= 0 ; i--) {
digitos[i] = Integer.parseInt("" + numero.charAt(i));
suma = suma + (digitos[i]*factor);
factor = factor==7? 2 : (factor+1);
}
//calculo el modulo 11 de la suma
modulo = suma % 11;
digitoVerificador = 11 - modulo;
if(digitoVerificador==11){
digitoVerificador = 0;
}
if(digitoVerificador==10){
digitoVerificador = 1;
}
} catch (Exception e) {
digitoVerificador = -1;
}
return digitoVerificador;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Digito Verificador de RUT (Uruguay)

Publicado por Eduardo (1 intervención) el 17/09/2013 21:46:01
Hola he estado investigando sobre como se genera el RUT, soy de México pero estoy trabajando para un proyecto de Uruguay.

Entonces quisiera saber si me podrían responder unas preguntas para ayudarme.

Es correcto lo siguiente?:
El RUT (en Uruguay) es XX-YYYYYY-ZZZ-V
Siendo:
x= Codigo del departamento
y= Numeros Asignados por DGI
z= Cantidad de Sucursales
v= DIGITO VERIFICADOR

# es decir asi es la forma en que se calcula o determina el RUT?.

Podrian decirme que impuestos y que retenciones tienen efecto en Uruguay?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de maurofum

Digito Verificador de RUT (Uruguay)

Publicado por maurofum (1 intervención) el 25/04/2014 16:59:12
Hola, medio tarde la respuesta pero por las dudas si alguien mas lo busca...
se aplica a x,y,z el siguiente algoritmo
Se va multiplicando por 23456789234 como decía Juan (o sea los primeros 11 dígitos)
Se suman todos los resultados
Se lo divide entre 11
Si el resto es 0 entonces el dígito verificador es 0
de lo contrario el dígito verificador es el resultado de 11 - el resto de la división

Ej. el rut de antel
| 2 | 1 | 1 | 0 | 0 | 3 | 4 | 2 | 0 | 0 | 1 | 7
| 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| 8 | 3 | 2 | 0 | 0 |21|24|10| 0 | 0 | 2 = 70

el resto de 70 / 11 = 4

digito verif. = 11 - 4 = 7

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Digito Verificador de RUT (Uruguay)

Publicado por Adrián Suárez (3 intervenciones) el 06/05/2015 06:20:52
Me tomé el trabajo de portar la función a php, ya que necesitaba este chequeo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function checkRut($rut) {
	if (strlen($rut) != 12 || !is_numeric($rut))
		return false;
	$dc = substr($rut, 11, 1);
	$rut = substr($rut, 0, 11);
	$total = 0;
	$factor = 2;
	for ($i = 10; $i >= 0; $i--) {
		$total += ($factor * substr($rut, $i, 1));
		$factor = ($factor == 9)?2:++$factor;
	}
	$dv = 11 - ($total % 11);
	if ($dv == 11)
		$dv = 0;
	elseif ($dv == 10)
		$dv = 1;
	return $dv == $dc;
}
slds!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Digito Verificador de RUT (Uruguay)

Publicado por Guillermo Céspedes (1 intervención) el 03/11/2015 14:16:41
Hola, les dejo la función que publico Adrián Suáre transformada para Javascript.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function validate_isRUT(rut)
{
	if (rut.length != 12){
		return false;
	}
	if (!/^([0-9])*$/.test(rut)){
               return false;
  	}
	var dc = rut.substr(11, 1);
	var rut = rut.substr(0, 11);
	var total = 0;
	var factor = 2;
 
	for (i = 10; i >= 0; i--) {
		total += (factor * rut.substr(i, 1));
		factor = (factor == 9)?2:++factor;
	}
 
	var dv = 11 - (total % 11);
 
	if (dv == 11){
		dv = 0;
	}else if(dv == 10){
		dv = 1;
	}
	if(dv == dc){
		return true;
	}
	return false;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Digito Verificador de RUT (Uruguay)

Publicado por Alejandro (2 intervenciones) el 22/10/2021 14:07:42
¿Cómo estás? He usado tu código durante mucho tiempo, pero se me acaba de presentar el caso de un RUT inválido, pero que la función devuelve que es válido: 170172601001.
Me gustaría contactarme contigo para ver si se puede mejorar la función.
Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Digito Verificador de RUT (Uruguay)

Publicado por Adrián Suárez (3 intervenciones) el 22/10/2021 15:53:16
Hola!
sabés que ese RUT no es válido.
Para saberlo, entré a mi software de facturación, que tiene un botón que chequea contra la DGI y me devuelve que es inválido.
Seguro que es un RUT de Uruguay?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Digito Verificador de RUT (Uruguay)

Publicado por Alejandro (2 intervenciones) el 22/10/2021 16:27:52
Si, sé que es inválido. Te comentaba que la función devuelve que es válido.
De cualquier manera, ya logré solucionar. Muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Digito Verificador de RUT (Uruguay)

Publicado por Adrián Suárez (3 intervenciones) el 22/10/2021 16:29:22
Muy mal lo mío, leí rápido y entendí mal!
si tenés el fix que le hiciste, postealo aqui!

Puede ser que en mi versión de PHP ya lo haya arreglado, porque esto es de hace mucho tiempo atrás!.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Digito Verificador de RUT (Uruguay)

Publicado por x-uy (2 intervenciones) el 02/08/2022 17:31:45
function validate_isRUT(rut) {
if (rut.length != 12) {
return false;
}
if (!/^([0-9])*$/.test(rut)) {
return false;
}
var dc = rut.substr(11, 1);
var rut = rut.substr(0, 11);
var total = 0;
var factor = 2;

for (i = rut.length - 1; i >= 0; i--) {
total += parseInt(rut.charAt(i)) * factor;
factor = factor == 9 ? 2 : factor + 1;
}
var rest = 11 - (total % 11);
if (rest == 11) {
rest = 0;
}
if (rest == dc) {
return true;
}
return false;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar