Hola chavos que tal aqui les traigo lo que es un simple programa para validar que el usuario nos de de manera correcta su RFC. Checa que el nombre y la fecha dada coincida con el escrito en el RFC.
Espero les sirva
package Casa;
import java.awt.Component;
import javax.swing.JOptionPane;
public class Rfc {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String mensaje;
String cadena;
char rfc[] = null;
int ban = 0;
//Pediremos el nombre
cadena=JOptionPane.showInputDialog("Nombre Completo.", "Escribe tu nombre completo.");
String cadena2 = cadena.toUpperCase();//pasamos el nombre todo a mayusculas
int lim =cadena2.length();//me da el tamño de la cadena "cadena2"
char nombre[]=cadena2.toCharArray();//ponemos en arreglo el nombre
//pediremos la fecha
cadena=JOptionPane.showInputDialog("Fecha de nacimiento.","dia/mes/año.");
int lim2 = cadena.length();//me da la longitud de la cadena fec
char fecha[] =cadena.toCharArray();//ponemos en un arreglo la fecha
do{
//no saldra del ciclo hasta que se de bien el rfc
cadena=JOptionPane.showInputDialog("RFC."+"Escribe salir si deseas Salir", "Dame tu RFC.");
cadena = cadena.toUpperCase();
if(cadena.equals("SALIR") ){
break;
}
Component componentePadre = null;//declaramos el componente padre
//confirmemos el RFC
int confirmado = JOptionPane.showConfirmDialog(componentePadre,"¿Lo confirmas?");
if (JOptionPane.OK_OPTION == confirmado)
{//Si lo confirma, da un mensaje de confirmacion
mensaje = String.format("Confirmado.");
JOptionPane.showMessageDialog(null, mensaje);
if( validarRfc(cadena) )
{//valida que sea un rfc
rfc = cadena.toCharArray();//transforma la cadena a un array
if(valida1(nombre,rfc,lim))//Valida que el nombre coincida
{
if(valida2(fecha,rfc,lim2))// Valida que la fecha coincida
{
mensaje = String.format(" RFC Correcto.");
JOptionPane.showMessageDialog(null, mensaje);
ban = 1;//asi se saldra del ciclo
}
}
else{
mensaje = String.format(" RFC ERRONEO. No coincide con tus nombre y fecha");
JOptionPane.showMessageDialog(null, mensaje);
}
}
else{//si esta mal digitado lo pide de nuevo
mensaje = String.format("Error. Tu RFC fue mal digitado."+"\n\n Damelo de nuevo.");
JOptionPane.showMessageDialog(null,mensaje);
}
}
else
{//si no lo pide de vuelta
mensaje = String.format(" Damelo de nuevo.");
JOptionPane.showMessageDialog(null, mensaje);
}
}while(ban == 0);
}//FIN DEL MAIN
//METODO PARA VALIDAR LA FECHA
private static boolean valida2(char[] fecha, char[] rfc, int lim2) {
// TODO Auto-generated method stub
int b=4;
for(int c=4; c<10; ++c){
for(int r =0; r< lim2; ++r){
if(rfc[c ] == fecha[r])//barre la fecha en el rfc
{
++b;
}
}
}
if(b == 10)
return true;
else
return false;
}
// METODO PARA VALIDAR EL NOMBRE
private static boolean valida1(char[] nombre, char[] rfc,int lim) {
// TODO Auto-generated method stub
int b=0;
for(int c=0; c < 4;++c ){
for(int a =0; a< lim; ++a){
if(rfc[c] == nombre[a])//barre el nombre en el rfc
{
++b;
}
}
}
if(b == 4 | b == 3)
return true;
else
return false;
}
/*Método que tiene la función de validar el rfc*/
public static boolean validarRfc(String rfc){
rfc=rfc.toUpperCase().trim();//devuelve la cadena sin espacios aql final y al principio
return rfc.toUpperCase().matches("[A-Z]{4}[0-9]{6}[A-Z0-9]{3}");//comprueba que sean iguales
}//Cierra método validarRFC
}