elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  DNI
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: DNI  (Leído 3,485 veces)
Alex_loar

Desconectado Desconectado

Mensajes: 3


Ver Perfil
DNI
« en: 25 Febrero 2008, 20:50 pm »

Hola, estoy haciendo el típico programa de calcular la letra del DNI, pero ahora con  un archivo de procesamiento por lotes(.bat). Tengo esto:

@echo off
echo Introduce un DNI
set /p dni=
set cadena= "TRWAGMYFPDXBNJZSQVHLCKE"
set /a cociente=%dni% / 23
set /a resto=(%dni%-(23* %cociente%))+1
echo El NIF es %cadena%[%resto%] <----------------¿?
pause>nul

Me falta sacar de la cadena la letra pero no sé como. Tampoco sé si existe alguna función para sacar el resto y evitarme así las variables cociente y resto.
A ver si alguien me puede echar una mano.

Gracias


En línea

Stacker

Desconectado Desconectado

Mensajes: 87



Ver Perfil
Re: DNI
« Respuesta #1 en: 26 Febrero 2008, 19:19 pm »

Hola, lo deje así y funciona. Si alguien sabe simplificarlo más:

Código:
@echo off
echo Introduce un NIF
set /p dni=
set cadena=TRWAGMYFPDXBNJZSQVHLCKE
set /a resto=%dni%-(23*(%dni%/23))
:bucle
set /a resto-=1
set cadena=%cadena:~1,23%
if %resto%==1 ( set cadena=%cadena:~1,1% ) else ( goto bucle )
echo La letra del NIF es %cadena%
pause>nul

-Se calcula el resto en una sola linea.
-Con un bucle se van eliminando a la vez un caracter del principio de la cadena y una unidad del resto.
-Cuando el resto llega a 1, se coge solamente el primer caracter de la cadena.


PD: Con el comando set /? puedes obtener más ayuda para tratar variables en batch.  ;)

Saludos


En línea

Alex_loar

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: DNI
« Respuesta #2 en: 27 Febrero 2008, 01:02 am »

Hola Stacker, lo primero gracias.
Tengo una duda, acabo de empezar con esto. Podrías explicar lo anterior a partir de la etiqueta.

Saludos
Álex
En línea

Stacker

Desconectado Desconectado

Mensajes: 87



Ver Perfil
Re: DNI
« Respuesta #3 en: 27 Febrero 2008, 19:45 pm »

Antes de nada, hay un error: fallaba cuando tenia que mostrar el primer caracter "T".

Código:
@echo off
echo Introduce un NIF
set /p dni=
set cadena=TRWAGMYFPDXBNJZSQVHLCKE
set /a resto=%dni%-(23*(%dni%/23))
:bucle
if %resto%==0 goto fin
set /a resto-=1
set cadena=%cadena:~1,23%
goto bucle
:fin
echo La letra del NIF es %cadena:~0,1%
pause>nul

Perdón por el primer código, pasa por hacerlo deprisa. :-\



Explicación:

La idea es ir eliminando un caracter del principio de la cadena por cada unidad del resto. Y después mostrar el primer caracter de los que queden.


if %resto%==0 goto fin, comprueba si el resto es o ha llegado a cero y termina.

set /a resto-=1, resta una unidad al resto.

set cadena=%cadena:~1,22%, coge 22 (para asegurarnos de abarcar todo) caracteres a partir de la posición 1, es decir todos menos el primero.

echo La letra del NIF es %cadena:~0,1%, igual que el anterior, en este caso desde la posición 0 y solamente 1 caracter.



La razón de usar este sistema en vez de simplemente:

echo La letra del NIF es %cadena:~%resto%,1%

- es que devuelve literalmente: cadena:~-n,1 , donde n es el resto.


Si alguien sabe evitar esto seria de gran utilidad y simplificaria muchísimo el código.

Espero que hayas entendido el código.

Saludos
En línea

Alex_loar

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: DNI
« Respuesta #4 en: 28 Febrero 2008, 00:53 am »

Ahora sí ;)

Gracias de nuevo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines