Skip to content

Instantly share code, notes, and snippets.

@gaulatti
Last active June 15, 2023 15:12
Show Gist options
  • Select an option

  • Save gaulatti/69a24cc199a4253d058c to your computer and use it in GitHub Desktop.

Select an option

Save gaulatti/69a24cc199a4253d058c to your computer and use it in GitHub Desktop.
HTML5 Chilean RUT Validator
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Validador de RUT HTML5</title>
</head>
<body>
<form>
<input type="text" id="rut" name="rut" required oninput="checkRut(this)" placeholder="Ingrese RUT">
<button type="submit">Validar RUT y Enviar Form</button>
<script src="validarRUT.js"></script>
</form>
</body>
</html>
function checkRut(rut) {
// Despejar Puntos
var valor = rut.value.replace('.','');
// Despejar Guión
valor = valor.replace('-','');
// Aislar Cuerpo y Dígito Verificador
cuerpo = valor.slice(0,-1);
dv = valor.slice(-1).toUpperCase();
// Formatear RUN
rut.value = cuerpo + '-'+ dv
// Si no cumple con el mínimo ej. (n.nnn.nnn)
if(cuerpo.length < 7) { rut.setCustomValidity("RUT Incompleto"); return false;}
// Calcular Dígito Verificador
suma = 0;
multiplo = 2;
// Para cada dígito del Cuerpo
for(i=1;i<=cuerpo.length;i++) {
// Obtener su Producto con el Múltiplo Correspondiente
index = multiplo * valor.charAt(cuerpo.length - i);
// Sumar al Contador General
suma = suma + index;
// Consolidar Múltiplo dentro del rango [2,7]
if(multiplo < 7) { multiplo = multiplo + 1; } else { multiplo = 2; }
}
// Calcular Dígito Verificador en base al Módulo 11
dvEsperado = 11 - (suma % 11);
// Casos Especiales (0 y K)
dv = (dv == 'K')?10:dv;
dv = (dv == 0)?11:dv;
// Validar que el Cuerpo coincide con su Dígito Verificador
if(dvEsperado != dv) { rut.setCustomValidity("RUT Inválido"); return false; }
// Si todo sale bien, eliminar errores (decretar que es válido)
rut.setCustomValidity('');
}
@MauricioBarriosB
Copy link
Copy Markdown

Bueno código! gracias por compartir.... bueno, por si alguien más le sirve, para quitar los puntos y guion ocupe estas exp. regulares:

function checkRut(rut) {
//Despejar Puntos
var valor = rut.replace(/./g, '');
//Despejar Guión
valor = valor.replace(/-/g, '');

@sealsior
Copy link
Copy Markdown

sealsior commented Dec 5, 2021

Muchas gracias por el código, me sirvió mucho!

@Enzo-Aravena
Copy link
Copy Markdown

como lo harían si les piden validar también los rut provisorios de extranjeros, los cuales comienzan de los 100 millones, no he podido encontrar la respuesta

@lataacido
Copy link
Copy Markdown

lataacido commented May 19, 2023 via email

@gaulatti
Copy link
Copy Markdown
Author

Esta semana voy a refactorizar esto (lo hice hace milenios), qué ha cambiado desde ese entonces en la forma de validarlo aparte del módulo 11?

@ngeorger
Copy link
Copy Markdown

He visto bastantes módulos sobre todo de WooCommerce que tienen módulos validadores, no sé si son APIs o corren scripots

@PatrickCaneloDigital
Copy link
Copy Markdown

Segun esta guia, el calculo es bastante simple y aplica para numeros de rut "infinitamente" largos...

https://validarutchile.cl/calcular-digito-verificador.php

la de jumpseller lleva un ejemplo muy compacto (dificil de leer) en javascript

https://jumpseller.cl/support/validar-rut-en-checkout/

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