Skip to content

Instantly share code, notes, and snippets.

@rbonvall
Created July 5, 2010 23:56
Show Gist options
  • Save rbonvall/464824 to your computer and use it in GitHub Desktop.
Save rbonvall/464824 to your computer and use it in GitHub Desktop.
Dígito verificador del RUT en Python
# encoding=utf-8
# Obtener el dígito verificador del RUT en Python.
#
# La función recibe el RUT como un entero,
# y entrega el dígito verificador como un entero.
# Si el resultado es 10, el RUT es "raya k".
from itertools import cycle
def digito_verificador(rut):
reversed_digits = map(int, reversed(str(rut)))
factors = cycle(range(2, 8))
s = sum(d * f for d, f in zip(reversed_digits, factors))
return (-s) % 11
@henhiskan
Copy link

me acabas de ahorrar tiempo, gracias bomba

@nguaman
Copy link

nguaman commented May 26, 2015

Gracias!

@ALXTorresC
Copy link

Hermano... me ahorraste montón de tiempo... ahora cabe preguntarte... puedo usarlo en mi proyecto de titulo para validar mis formularios?

@jrovegno
Copy link

jrovegno commented Jan 19, 2017

En Ruby:

def calcula_dv(rut_base)
    reversed_digits = rut_base.to_s.reverse.chars.map(&:to_i)
    factors = (2..7).to_a.cycle
    suma = reversed_digits.zip(factors).inject(0) {|sum, (d, f)| sum + d * f }
    dv = (-suma) % 11 == 10 ? 'K' : (-suma) % 11
end

@aldrinmartoq
Copy link

Gracias @jrovegno ;-)

@vimavis
Copy link

vimavis commented Jan 9, 2018

vale compadre, te pasaste 👍

@ShelbyCobraGT500
Copy link

Hola sabes que me da ese error :
como puedo solucionarlo

Traceback (most recent call last):
File "", line 1, in
File "", line 7, in udf_rn103_validar_dv
File "", line 7, in
ValueError: invalid literal for int() with base 10: 'K'

@DiegoArrieta
Copy link

Muy bueno! agradecido, no es malo validarlo del lado del servidor.

@unho
Copy link

unho commented Jun 4, 2019

Es para el RUT de Chile o para el de Uruguay?

@mraddatz
Copy link

De Chile

@nikom1912
Copy link

Gracias Amigo, me sirvió mucho. Saludos

@katacliny
Copy link

Mil Gracias !!

@jtperez2
Copy link

grande! todavía vigente

@Francisco-88
Copy link

muchas gracias

@michalexvr
Copy link

michalexvr commented Apr 25, 2023

#Incluye la K
from itertools import cycle

def digito_verificador(rut):
reversed_digits = map(int, reversed(str(rut)))
factors = cycle(range(2, 8))
s = sum(d * f for d, f in zip(reversed_digits, factors))
return (-s) % 11 if (-s) % 11 < 10 else 'K'

@alvaro-diaz-valenzuela
Copy link

Todavía vigente, muchas gracias. Además el detalle de @michalexvr está muy bueno.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment