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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [SOLUCIONADO][BATCH]Funcion Valida Rut
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO][BATCH]Funcion Valida Rut  (Leído 7,025 veces)
FranciskoAsdf

Desconectado Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
[SOLUCIONADO][BATCH]Funcion Valida Rut
« en: 19 Septiembre 2009, 18:07 pm »

Hola a Todos, espero me puedan ayudar en esta ocacion T_T...
Estoy haciendo un programita, en donde cada persona debe entrar con su RUT (Registro Único Tributario.CHILE), pero necesito verificar si el RUT de la persona esta bien escrito o es real,  para eso existe una funcion llamada "Funcion Valida Rut", a mi me la pasaron en Vb6.0, no es muy complicada, pero parece que en batch si xD...

Explico un poko como se valida un RUT...

Por ejemplo tengo los 8 primeros digitos del RUT 11.222.333-?, lo que hace la funcion es extraer desde atras para adelante los 8 primeros digitos y multiplicarlos por numeros específicos por ejemplo:

Código:

     1   1   2   2   2   3   3   3  
   * 3   2   7   6   5   4   3   2
   --------------------------------------
     3   2  14  12  10  12   9   6
Los Resultados se Suman y eso da un total
Código:
3 + 2 + 14 + 12 + 10 + 12 + 9 + 6 = 68
Despues ese resultado se divide por 11
Código:
68 : 11 = 6
2
(El resultado con decimales seria 6,1818181818181818181818181818182, que se aproxima a 2)
EL "RESTO" de la operación se le resta a 11 en este caso seria:
Código:
11- 2 = 9

Donde 9 seria el Dígito verificador del RUT.

Ahora, ya se como extraer los primeros 8 numeros que ingresa al usuario, multiplicarlos cada uno, y sumarlos (definitivamente no es para nada dificil hacerlo :)), pero estoy parado en la parte de la division, porque batch solo hace division por numeros enteros, en la division solo me daria el resultado el 6 mas no asi el 2 que es el numero que yo necesito para poder restarlo a 11.-

busque en San Google divisiones con decimales en batch y encontre un par, incluso uno de este foro, pero no supe como adaptarlos a mi code, ademas eran muy largos (con justificada razon supongo, aunque me da lo mismo si es largo o no el code D:) para poder entender lo que hacen, ademas tengo que aproximar la cifra: "6,1818181818181818181818181818182" (tomo el resultado del ejemplo anterior, obviamente esto puede variar) a 2 (se toma del ejemplo anterior), o por lo menos saber el "RESTO" de la operacion como numero entero para poder restarlo a 11, pero ese es mi gran problema, que nose como hacerlo :S, ademas no existe en batch (que yo sepa) una funcion como el "MID" en VB6.0.-

Espero que alguien me pueda ayudar porfavor T_T.-!

De ante mano muchas gracias por las respuestas.-



« Última modificación: 20 Septiembre 2009, 16:14 pm por Panxulingo » En línea

Asdf debería ser algún tipo de función.
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: [AYUDA][BATCH]Funcion Valida Rut
« Respuesta #1 en: 20 Septiembre 2009, 08:28 am »

eso que buscas se llama módulo que es el resto de la división de enteros.
hice el código, a lo mejor te sirve, o si prefieres escribe tu propia versión.

La parte que buscas es:
Código:
set /a "dc=11-suma%%11"

Código:
@echo off

:ini
call :getRut
call :validaRut
if errorlevel 1 (
echo.Rut invalido
) else (
echo.Rut valido
)

pause
goto :eof

:getRut
setlocal enableextensions enabledelayedexpansion
set /p rut=Escriba rut:
(endlocal & set "rut=%rut%")
goto :eof

:validaRut
setlocal enableextensions enabledelayedexpansion
if defined rut (set "rut=!rut:.=!")
echo.!rut!|findstr.exe /r /i "\<[0-9]*\-[0123456789K]\>">nul 2>&1
if errorlevel 1 (exit /b 1)
set "numeros=!rut:~0,-2!"
set "n=!numeros!"
set "dv=!rut:~-1!"
set /a "c=2"
set /a "suma=0"
:mult
set "d=!n:~-1!"
set /a "suma+=d*c"
set /a "c+=1"
if !c! gtr 7 (set /a "c=2")
set "n=!n:~0,-1!"
if defined n (goto :mult)
set /a "dc=11-suma%%11"
set "dt=!dc!"
if !dc! equ 10 (set "dt=K")
if !dc! equ 11 (set "dt=0")
set /a ret=1
if /i "!dt!" equ "!dv!" (set /a ret=0)
exit /b !ret!

saludos.


« Última modificación: 20 Septiembre 2009, 08:31 am por 0x0309 » En línea

FranciskoAsdf

Desconectado Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
Re: [AYUDA][BATCH]Funcion Valida Rut
« Respuesta #2 en: 20 Septiembre 2009, 16:08 pm »

 :o :o :o :o quede loco xD, osea !
Mi Codigo es algo asi, todo lo que se ve es porke lo estaba probando xD
Código:
@echo off

set /P "rut=Ingrese su rut: "
if not defined rut (goto :eof) ELSE (goto :FuncionValidaRut)
:FuncionValidaRut
set "D_Ocho=%rut:~7%"
set "D_Siete=%rut:~6,-1%"
set "D_Seis=%rut:~5,-2%"
set "D_Cinco=%rut:~4,-3%"
set "D_Cuatro=%rut:~3,-4%"
set "D_Tres=%rut:~2,-5%"
set "D_Dos=%rut:~1,-6%"
set "D_Uno=%rut:~0,1%"
ECHO.
ECHO numeros extraidos
echo %D_Ocho% %D_Siete% %D_Seis% %D_Cinco% %D_Cuatro% %D_Tres% %D_Dos% %D_Uno%

:: Multiplicaciones

set /a D_Ocho=D_Ocho*2
set /a D_Siete=D_Siete*3
set /a D_Seis=D_Seis*4
set /a D_Cinco=D_Cinco*4
set /a D_Cuatro=D_Cuatro*6
set /a D_Tres=D_Tres*7
set /a D_Dos=D_Dos*2
set /a D_Uno=D_Uno*3
echo resultado multiplicaciones
Echo %D_Ocho% + %D_Siete% + %D_Seis% + %D_Cinco% + %D_Cuatro% + %D_Tres% + %D_Dos% + %D_Uno%

set /a SumaFinal=%D_Ocho%+%D_Siete%+%D_Seis%+%D_Cinco%+%D_Cuatro%+%D_Tres%+%D_Dos%+%D_Uno%
echo sumafinal
echo %SumaFinal%
echo division de sumafinal por 11
set /a Division=%SumaFinal%/11
echo resultado de la operacion anterior
echo %division%
echo sacamos el resto
set /a resto=%Division%%%11
echo %resto%

echo numero validador
set /a NroValidador=11-%resto%

echo %NroValidador%

IF ["%NroValidador%"]==["10"] (SET "NroValidador=K")
IF ["%NroValidador%"]==["11"] (SET "NroValidador=0")

echo su rut es %rut%-%NroValidador%

Pause
GOTO :EOF

como ves el super rustico xD, ademas de que nunca he sabido como funciona "setlocal enableextensions enabledelayedexpansion", aunque me falta aun filtrar los puntos que pueda ingresar el usuario y varias cosas mas, pero muchas gracias voy a ESTUDIAR tu code, para ver como funciona :)

Saludos y muchas gracias de nuevo!!!!
« Última modificación: 20 Septiembre 2009, 18:24 pm por Panxulingo » En línea

Asdf debería ser algún tipo de función.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado] Batch ftp
Scripting
CAR3S? 6 5,641 Último mensaje 25 Abril 2011, 22:52 pm
por CAR3S?
[Solucionado] ¿La funcion scanf() permite escribir?
Programación C/C++
criskapunk 9 7,070 Último mensaje 29 Junio 2011, 02:59 am
por criskapunk
[Batch] funcion comprobación
Scripting
KZN 4 2,649 Último mensaje 19 Marzo 2014, 12:19 pm
por KZN
problema con funcion abs (solucionado)
Programación C/C++
nolasco281 0 1,786 Último mensaje 16 Abril 2014, 00:56 am
por nolasco281
Funcion MS-DOS no valida -SOLUCIONADO
Windows
Zorronde 0 15,959 Último mensaje 14 Octubre 2015, 17:37 pm
por Zorronde
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines