PabloDag Posted December 8, 2010 Report Share Posted December 8, 2010 Hola tengo una dida tengo hecho la validacion pero me tira un error si le ingreso calquier rut sin "-" (guion) me pregunto si existe una condicion para que entre al metodo solo si tiene el guion DE ANTE MANO MUCHAS GRACIAS Link to comment Share on other sites More sharing options...
BULLAN9EBRIO Posted December 8, 2010 Report Share Posted December 8, 2010 Uta compa no me manejo en Java , pero e hecho cosas parecidas en otros lenguajes, por ejemplo, cuento el largo de la variable rut, si esta es igual a nueve, extraigo los primero 8 digitos en una nueva variable, y el digito numero nuevo lo paso a una variable dv, luego las "pego" onda digitos.guion.dv y hago la consulta y un rut con 10 digitos lo mismo , si tiene mas o menos caracteres no los dejo pasar, Sorry por el "super ejemplo" :tonto: pero realmente no cacho Java, pero espero que te sirva por lo menos mi comentario,salUdos. Link to comment Share on other sites More sharing options...
PabloDag Posted December 8, 2010 Author Report Share Posted December 8, 2010 Si eso hago esta todo okay pero el programa se cae cuando le ingresan un rut sin guion y ahi es donde tengo el problema Link to comment Share on other sites More sharing options...
wtfbenja Posted December 8, 2010 Report Share Posted December 8, 2010 lee el rut como String y recorrelo con substring completo y busca el guion for i if(!rut.substring(i,i+1).equals("-") !! pongale guion una cosa asi algoritmicamente Link to comment Share on other sites More sharing options...
arfourgin Posted December 8, 2010 Report Share Posted December 8, 2010 Claro opino lo mismo que el anterior. Haz que el dato ingresado en este caso el rut sea un string y buscas el guion con el substring, en caso de que no lo encuentre que envie un error, o una excepcion para que el programa no se te caiga. Link to comment Share on other sites More sharing options...
PabloDag Posted December 8, 2010 Author Report Share Posted December 8, 2010 (edited) Tienen toda la razón así lo voy a a hacer, y si lo leo como String luego hago un rut.length()==11 es porque tiene dos punto (11.111.111-1) y entra a la condición lo estoy haciendo para que no me tire ningún error osea si lo ingresan sin untos pasa si lo ingresan con un punto pasa también si lo ingresan con los dos puntos también verifica si es valido pero si me ingresaban un largo de caracteres ==11 11111111111 y sin guion ahí pasaba a la condición pero ahí se me caía ahí les aviso como me fue MUCHAS GRACIAS Edited December 9, 2010 by PabloDag Link to comment Share on other sites More sharing options...
xchanox Posted December 9, 2010 Report Share Posted December 9, 2010 (edited) hola, tabién puedes usar lo siguiente: String rut_a = 12.345.678-9 String rut_b = 12345678-9 String rut_resultante; rut_resultante = rut_a.replace( "." , "" ); // rut_resultante ahora contiene "12345678-9" rut_resultante = rut_b.replace( "." , "" ); // rut_resultante ahora contiene "12345678-9" como puedes ver el resultado es el mismo para los dos casos, lo que hace replace es buscar el caracter indicado en el primer argumento (puede ser un caractér o una cadena) y reemplazarlo por el segundo argumento (puede ser un caractér o una cadena, en este caso una cadena vacía que borra de tu string la cadena indicada en el primer argumento), si no lo encuentra lo deja como está. Este método es conveniente para que no haya error incluso si puso el primer punto y no el segundo. Puedes hacer lo mismo si quisieras dejar independiente del guión. Después que hayas quitado puntos y/o el guión, puedes hacer con toda tranquilodad la validación de la longitud del string resultante porque todos serán iguale en longitud independiente de si el usuario puso o no los puntos o el guión. Edited December 9, 2010 by xchanox Link to comment Share on other sites More sharing options...
PabloDag Posted December 9, 2010 Author Report Share Posted December 9, 2010 (edited) Si estuve viendo y tienes razon... es mucho mejor eso que un StringTokenizer ya que tengo muchos if en cambio con eso me saltaria carios lo que si nose como hacerlo para que no entre a las condiciones si no tiene guion lo que hice fue lo siguiente: for (int i=0;i<d.length();i++)//aqui recorre el string que le ingresan if(!d.substring(i,i+1).equals("-")){//pregunta por el guion y si no esta System.out.print("Ingrese rut nuevamente: ");//muestra esto en pantalla } pero me tira esto en pantalla Ingrese rut nuevamente: Ingrese rut nuevamente: Ingrese rut nuevamente: Ingrese rut nuevamente: Ingrese rut nuevamente: Ingrese rut nuevamente: Ingrese rut nuevamente: Ingrese rut nuevamente: Ingrese rut nuevamente: Rut con sobra de caracteres y la condiciones que le doy son las siguientes: if(rut.length()<10 && rut.length()>12){ System.out.print("Rut Invalido intentelo nuevamente"); else if(rut.length()==12){//11.111.111-4 eso quiere decir ==12 con 2 puntos StringTokenizer rut1=new StringTokenizer(rut,".");//aqui quito los puntos String rut2=""; rut2=rut1.nextToken(); rut2=rut2.concat(rut1.nextToken()); rut2=rut2.concat(rut1.nextToken()); String[] cadena = rut2.split("-"); else if(rut.length()==10)//aqui en el caso que no tenga puntos 11111111-1 { String[] cadena = rut.split("-");//aqui le quito el quion else if(rut.length()==11){//aqui en el caso de que pongan un solo punto en cualquier lugar StringTokenizer rut1=new StringTokenizer(rut,"."); String rut2=""; rut2=rut1.nextToken(); rut2=rut2.concat(rut1.nextToken()); String[] cadena = rut2.split("-"); El programa se cae si no le ingresan con rut, con lo que tu dices xchanox al parecer es mas facil pero aun asi se me caeria si no me ingresan el guion GRACIAS DE TODAS MANERAS Edited December 9, 2010 by PabloDag Link to comment Share on other sites More sharing options...
wtfbenja Posted December 9, 2010 Report Share Posted December 9, 2010 (edited) pusha encuentro que te estas ahogando en una gota de agua, mira googleando encontre este metodo, siempre he sido de la idea que si la rueda esta inventada, hay que ocuparla no inventarla denuevo. public static boolean verificarRut(int rut, char dv) { int m = 0, s = 1; for (; rut != 0; rut /= 10) { s = (s + rut % 10 * (9 - m++ % 6)) % 11; } return dv == (char) (s != 0 ? s + 47 : 75); } que resive como parametro el rut y el digito verificador tira a sacarle los puntos y el guion como dijero ahi arriba y lo tiras a este metodo ten encuenta que los rut no son solamente de los 10 millones en adelante hay 5 millines hay 100 mil y 25 mil xD tienes que tener esos casos, saludos. Edited December 9, 2010 by wtfbenja Link to comment Share on other sites More sharing options...
Beodo_ldea Posted December 9, 2010 Report Share Posted December 9, 2010 yo lo hice en c# ojala te sirva private string digitoverificador(int rut) { int digito; int contador; int multiplo; int acumulador; string rutdigito; contador = 2; acumulador = 0; while (rut != 0) { multiplo = (rut % 10) * contador; acumulador = acumulador + multiplo; rut = rut / 10; contador = contador + 1; if (contador == 8) { contador = 2; } } digito = 11 - (acumulador % 11); rutdigito = digito.ToString().Trim(); if (digito == 10) { rutdigito = "K"; } if (digito == 11) { rutdigito = "0"; } return (rutdigito); } Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now