Antes que todo, es bueno aclarar que lo que se realiza a continuación es valido solo para los RUTs Chilenos.
Bueno, como sabemos nuestro RUT, es nuesto numero de indetificación, unico e irrepetible, no hay 2 personas en Chile con el mismo RUT (o así debiese ser) y hay una forma de comprobar si un RUT es valido o no. A continuación no solo les enseñaremos esa formula sino que además les enseñaremos como hacerlo en PHP.
Para ver todo esto, vamos despues del salto.
Nota: Es importa que sepan, que como en la mayoria de los casos de programación, esta no es la única manera de realizar lo requerido, mostraremos la forma más completa, pero sientanse en la libertad de optimizar este codigo ustedes mismos.
– Un editor que soporte PHP (Como Dreamweaver).
Lo primero que necesitamos saber antes de programar esto en PHP, es saber como se hace “esto”:
Bueno, paso a explicar la formula para conseguir el Digito Verificador de un RUT, usaremos el RUT 45875986 como ejemplo:
1.- Se toma el RUT sin el Digito Verificador e invertimos los numeros, el RUT quedaría:
68957854
2.- Luego de esto multiplicamos la primera cifra por 2, el segundo por 3 y asi sucesivamente, pero cuando llegamos al multiplicador 7, en la proxima cifra se vuelve a 2 y se reinicia, hacemos con todas las cifras del RUT, así:
6×2 = 12
8×3 = 24
9×4 = 36
5×5 = 25
7×6 = 42
8×7 = 56
5×2 = 10
4×3 = 12
3.- Sumamos todos los resultados:
12 + 24 + 36 + 25 + 42 + 56 + 10 + 12 = 217
4.- El resultado de la suma lo dividimos por 11 y extraemos el resto (lo que sobra de la división):
217 : 11 = 19
8 <—- Este es el resto
5.- Ese resto se lo restamos, valga la redundancia, a 11 y con esto obtenemos nuestro Digito Verificador:
11 – 8 = 3
Siendo el RUT completo:
45875986-3
6.- Lo anterior tiene 2 excepciones, si el resultado de la resta (en este caso 11 – 3) da como resultado “11”, entonces el digito verificador es “0” y si el resultado de la resta da “10” entonces el digito verificador es “K”.
Ya sabiendo como se realiza el calculo del Digito Verificador, pasemos a PHP.
1.- Creamos un formulario donde se pida ingresar el rut, el codigo el siguiente, pueden encontrar la explicación de este tipo de formularios en nuestro Tutorial: Como hacer un formulario de contacto
<form action=”rut.php” method=”post”>
<table>
<tr>
<td>Ingrese Rut: </td>
<td><input type=”text” size=”8″ maxlength=”8″ name=”rut”>-<input type=”text” size=”1″ maxlength=”1″ name=”dv”></td>
</tr>
</table>
<input type=”submit” value=”Comprobar”>
</form>
Y a continuacion el codigo PHP para realizar la formula con las explicaciones de cada paso escritas entre los simbolos /* */:
<?php
/* Iniciamos PHP */
$rut=$_REQUEST[“rut”];
$dv=$_REQUEST[“dv”];
/* Con las lineas anteriores le asignanos a las variables $rut y $dv, lo ingresado por formulario en la página anterior, solo utilizaremos el rut. El digito verificador, lo usaremos al final*/
$rutin=strrev($rut);
/* Invertimos el rut con la funcion “strrev” */
$cant=strlen($rutin);
/* Contamos la cantidad de numeros que tiene el rut */
$c=0;
/* Creamos un contador con valor inicial cero */
while($c<$cant)
{
$r[$c]=substr($rutin,$c,1);
$c++;
}
/* Hacemos un ciclo en el que se creara un array o arreglo que se llamara $r, en el cual se le asignara a cada valor del array, el valor correspodiente del rut, Por ej: para el rut 12346578, que invertido sería 87654321, el valor de $r[0] es 8, de $r[5] es 3 y asi sucesiva y respectivamente. */
$ca=count($r);
/* Contamos la cantidad de valores que tiene el arreglo con la función “count” */
$m=2;
$c2=0;
$suma=0;
/* En las lineas anteriores creamos 3 cosas, un multiplicador con el nombre $m y que su valor inicial es 2, ya que por formula es el primero que necesitamos, creamos tambien un segundo contador con el nombre $c2 y valor inicial cero y por ultimo creamos un acumulador de nombre $suma en el cual se guardara el total luego de multiplicar y sumar como manda la formula */
while($c2<$ca)
{
$suma=$suma+($r[$c2]*$m);
if($m==7)
{
$m=2;
}else{
$m++;
}
$c2++;
}
/* Hacemos un nuevo ciclo en el cual a $suma se le suma (valga la redundancia) su propio valor (que inicialmente es cero) más el resultado de la multiplicación entre el valor del array correspondiente por el multiplicador correspondiente, basandonos en la formula */
$resto=$suma%11;
/* Calculamos el resto de la división usando el simbolo % */
$digito=11-$resto;
/* Calculamos el digito que corresponde al Rut, restando a 11 el resto obtenido anteriormente */
if($digito==10)
{
$digito=K;
}else{
if($digito==11)
{
$digito=”0″;
}
}
/* Creamos dos condiciones, la primero dice que si el valor de $digito es 11, lo reemplazamos por un cero (el cero va entre comillas. De no hacerlo así, el programa considerará “nada” como cero, es decir si la persona no ingresa Digito Verificado y este corresponde a un cero, lo tomará como valido, las comillas, al considerarlo texto, evitan eso). El segundo dice que si el valor de $digito es 10, lo reemplazamos por una K, de no cumplirse ninguno de las condiciones, el valor de $digito no cambiará. */
if($dv==$digito)
{
echo “Valido”;
}else{
echo “No Valido”;
}
/* Por ultimo comprobamos si el resultado que obtuvimos es el mismo que ingreso la persona, de ser así se muestra el mensaje “Valido”, de no ser así se muestra el mensaje “No Valido” */
?>
Y con esto ya tienen listo su validador de RUT.
Cualquier duda, dejen su comentario
Por ahora,
Me despido.
9:00:26 am
ke es un RUT????
me explicas??
12:42:03 pm
La explicacion para el rut http://es.wikipedia.org/wiki/RUT
1:11:34 am
quote
ke es un RUT????
me explicas??
/quote
este si que es weon.
1:41:56 am
@Eric
No, no es weon, Comolohago no es solo visto por personas chilenas y no en todo el mundo se conoce como RUT.
Te agradeceria no referiste asi de otros usuarios
1:30:42 am
Realice los pasos, pero ingrese un rut inventado y se inserto de igual forma en la pagina y quedo registrado en el mysql, que puede ser, algo hice mal, el formulario es para ingresar info a una bd mysql.
primero el formulario dentro de las etiquetas <form bla bla> obvio cierro</ form> y empiezo con el código php de inmediato.
?php>, no se si con un include funcionara para no tener que poner el código en el mismo formulario pero en fin, puse todo el código dentro del archivo formulario.html, agradecería me pudieren echar una ayudita.
Saludos.
1:49:12 am
@Eric
El hecho de ingresarse o no en la base de datos es un parametro que tienes que agregar, donde muestra Valido o No Valido en el codigo debe ser reemplazado (o agregado) la opcion de agregar a la base de datos si es valido o no hacer nada (o algun mensaje de error) si no lo es.
2:39:46 am
Bien, pido las disculpas del caso, no ocurrira mas, por lo menos aquí jejeje.
Puedes editar el post si loconsideras agresivo no hay problema.
Con respecto al tema del rut lo soluciones y lo quiero compartir con ustedes.
Es un verificador que a medida que pones el rut te va calculando el valor del verificador.
Hay va
En el head del formulario
<script language=”javascript” type=”text/javascript”>
function Text1_onclick() {
rut = document.getElementById(‘rut’).value;
document.getElementById(‘dv’).value = dv(rut);
}
function dv(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’;}
</script>
Dentro del formulario en la fecha:
<label>
<input name=”rut” id=”rut” size=”10″ type=”text” language=”javascript” onClick=”return Text1_onclick()” onKeyUp=”return Text1_onclick()” />
<input name=”dv” type=”text” id=”dv” style=”width: 18px” />–></label>
El único problema es que el formulario me devuelve un error de “falta un dato”, ya revise todo y no se que puede ser.
estoy haciendo un formulario para un colegio, y no consigo verificar el rut ni la fecha de nacimiento del alumno, me he roto la cabeza y he buscado mucha info, pero no consigo el resultado que quiero, si me pueden apoyar seria genial.
a todo esto primera ves que entro en este blog y me parece bastante interesante, el contenido es muy adecuado.
10:30:46 am
@Eric: Me parece mucho que hay un problema con el for que especificaste dentro de la función dv, más especificamente con los parámetros que le estás dando. Te recomiendo revisar eso.
Saludos
5:03:56 pm
Hola Todos,
la funcion if($dv==$digito) dice que si $dv es igual a $digito marque validar y else no validar, cual es la forma de hacerlo al revez para agregarlo a un formulario de contacto? que marque si $dv no es igual a $digito marque rut incorrecto y else siga con la validacion de los otros campos del formulario.
gracias saludosss
4:53:30 pm
creo que mi funcion es mas corta y facil de usar.. no veo para q usar tanto codigo en algo asi
function valida_rut($rut){
if(preg_match(‘/^(\d{1,9})-((\d|k|K){1})$/’,$rut,$d)){
$r=$d[1];for($o=$s=0;(int)$r;$r/=10)$o+=($r%10*(9-$s++%6));$o%=11;return chr($o<10?$o+48:75)==ucfirst($d[2]);
}
}