Calcular la letra del DNI con scripts en Bash y Python

No Gravatar

He creado un pequeño script en Bash como prueba de concepto para saber la letra de un NIF a partir de un DNI español. La forma de averiguarlo es bastante sencilla por lo que no creo que a nadie le haga falta que explique el método, ya que se puede ver a simple vista en el propio script. Aqui va el código comentado por si a alguien le hiciera falta:

#!/bin/bash
# Prueba de concepto para el cálculo
# de la letra del DNI Español a través
# de bashscript.
clear
#
# Rellenamos una lista (array) con los valores de las 23 posiciones de las letras
#
letra=(T R W A G M Y F P D X B N J Z S Q V H L C K E)
#
# Creamos una función para contar la longitud de la cadena introducida por el usuario
function longitud() {
long=$(echo $1 | wc -m)
}
# Contamos cuantos elementos hay en nuestro array y lo almacenamos
total=${#letra[*]}
# Inicializamos la variable del control del bucle
control='0'
# Mientras que no indiquemos lo contrario, se ejecutará el bucle...
while [ $control -eq 0 ] ;
do
# Ahora solicitamos el DNI sin la letra del NIF
read -p "Introduzca su nº de DNI SIN la letra: " dni
longitud $dni
if [ $long -ne 9 ];
then
echo "La longitud del número introducido no es correcta."
echo "Si la cifra introducida es inferior a 8 cifras, ponga un cero a la izquierda."
echo "Si es superior, hagaselo mirar..."
control='0'
else
# Dividimos nuestro nº de DNI por el total de elementos del array
divi=`expr $dni \/ $total`
# Multiplicamos el resultado de nuevo por el total de elementos
multi=`expr $divi \* $total`
# Restamos a nuestro DNI el resultado de la anterior operación
resto=`expr $dni - $multi`
# Y así obtenemos la letra, que nos ayudará a calcular la posición del array
echo " _____________________________________________________"
echo ""
echo " La letra que corresponde a tu DNI es ${letra[$resto]} "
sleep 1
echo ""
echo " Tu NIF es $dni-${letra[$resto]}"
echo "______________________________________________________"
echo
control='1'
fi
done

 

Y lo mismo con Python:

#!/usr/bin/python
# Creamos una lista con el orden de las letras
letras = 'TRWAGMYFPDXBNJZSQVHLCKE'
# Solicitamos el número de DNI
dni = input('Dame el numero de tu DNI:')
# Sacamos el resto de la división
resto = dni % 23
print 'La letra de tu DNI es: ' , (letras[resto])
raw_input('Pulsa enter para salir.')

Como siempre, el mejor método para ejecutar ambos scripts es asignándole permisos de ejecución con “chmod +x nombredelscript” y ejecutándolos con “./nombredelscript”.

Saludos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.