Bienvenido al sistema de Preguntas y Respuestas de DesdeLinux.net Si tienes alguna duda o pregunta siéntete libre de compartirla aquí. Entre todos te ayudaremos. Antes de empezar, te sugerimos que le pegues un vistazo a nuestra guía de preguntas frecuentes (FAQ, en inglés) para entender cómo funciona Ask DesdeLinux.
+1 voto
preguntado por en Terminal - Bash
¡Hola!

Necesito crear un script que permita verificar el run chileno, por medio de validación del dígito verificador.

Esta es la fórmula:

1. Tome los números de su RUT (sin contar el dígito verificador, obvio). Ejemplo:

30.686.957-X

2. Delos vuelta.

7 5 9 6 8 6 0 3

3. Tome los números y vaya multiplicando cada uno de ellos por la siguiente serie de números: 2, 3, 4, 5, 6, 7… en ese orden. Si se le acaban los números de la serie, vuelva a usarla desde el principio.

7 × 2 = 14
5 × 3 = 15
9 × 4 = 36
6 × 5 = 30
8 × 6 = 48
6 × 7 = 42
0 × 2 = 0
3 × 3 = 9

4. Una vez que haya multiplicado cada uno de los números, sume los resultados obtenidos.

14 + 15 + 36 + 30 + 48 + 42 + 0 + 9 = 194

5. Divida el número obtenido por 11 y obtenga el resto..

194 ÷ 11 = 17
Resto: 7

6. Al número 11, réstele el resto de la división anterior.

11 - 7 = 4

7. Ahora hay que analizar el número obtenido. Hay tres posibilidades:

* Si el número obtenido es 1, 2, 3, 4, 5, 6, 7, 8 ó 9; ése es el dígito verificador.
* Si el número obtenido es 11, el dígito verificador es 0.
* Si el número obtenido es 10, el dígito verificador es K.

El script debe tener un menu (opción 1, verificar run, opción 2 salir)

Debe permitir verificar mas de un run (después de verificar un rut, debe preguntar si desea verificar otro rut)

Deben utilizar las condicionales if - if/else y las iteraciones while.
si desean pueden utilizar también ciclos for y otro que consideren necesario.

Tambien tengo un scrips prueba pero no me a funcionado
Code:
#!/bin/bash $rut = "15109054"; $eliminarElementos = "/[-][0-9]/"; $rut = preg_replace($eliminarElementos, "", $rut); $eliminarElementos = "/[-][k]/"; $rut = preg_replace($eliminarElementos, "", $rut); $eliminarElementos = "/[-][K]/"; $rut = preg_replace($eliminarElementos, "", $rut); $eliminarElementos = "/[-]/"; $rut = preg_replace($eliminarElementos, "", $rut); $eliminarElementos = "/[.]/"; $rut = preg_replace($eliminarElementos, "", $rut); $multiplicaciones = array(); $multiplicaciones[0] = 2; $multiplicaciones[1] = 3; $multiplicaciones[2] = 4; $multiplicaciones[3] = 5; $multiplicaciones[4] = 6; $multiplicaciones[5] = 7; $formula = ""; $suma = 0; $contadorMultiplo = 0; for ($i = strlen($rut); $i >= 0; $i--) { $formula.=$rut[$i]; } for ($i = 0; $i < strlen($rut); $i++) { if ($i == count($multiplicaciones)) { $contadorMultiplo = 0; } echo "Suma : $suma y multiplicando $formula[$i] * $multiplicaciones[$contadorMultiplo] "; $suma = $suma + $multiplicaciones[$contadorMultiplo] * $formula[$i]; $contadorMultiplo++; } echo "La suma total es $suma "; $resultadoResto = $suma % 11; echo "El resultado del resto es $resultadoResto "; $resultadoDigitoVerificador = 11 - $resultadoResto; switch ($resultadoDigitoVerificador) { case "11": $resultadoDigitoVerificador = 0; break; case "10": $resultadoDigitoVerificador = "k"; break; } echo "El digito verificador es $resultadoDigitoVerificador "; echo "Rut invertido $formula";

Si alguien me puede ayudar se lo agradecería un montón.
Compartir esta pregunta:
comentado por (100 puntos)
Hola, pudiste resolverlo, también necesito lo mismo si es así podrías compartirlo.
Saludos!

1 Respuesta

+1 voto
respondido por (2.2k puntos)
Aqui te dejo un ejemplo, le falta bastante pero calcula el digito verificador, espero que te sirva.
Code:
#!/bin/bash rut=15109054 contador=2 while [ $rut -gt 0 ] do let multiplo=($rut%10)*$contador let acumulador+=$multiplo let rut/=10 let contador+=1 if [ "$contador" = "8" ]; then let contador=2 fi done let digitoverificador=11-$(($acumulador%11)) case $digitoverificador in 10) digitoverificador="K" ;; 11) digitoverificador=0 ;; esac echo "el digito verificador es $digitoverificador"

atte
jvk85321

Preguntas relacionadas

0 votos
1 respuesta 130 visitas
preguntado por CheloElite Mar 27, 2015 en Servidores
0 votos
1 respuesta 2.6k visitas
0 votos
0 respuestas 61 visitas
0 votos
1 respuesta 115 visitas
...