Você está na página 1de 31

TECNOLOGICO DE ESTUDIOS SUPERIORES DE CUAUTITLAN IZCALLI

RFC
CODIGO EN NETBEANS
Ramrez Franco, Luis Andrs 09/05/2011

Introduccin

Seguro que para aquellos que estn acostumbrados a programar no encontraran nada nuevo, pero para aquellos que no estn acostumbrados o no conocen de programacin encontraran aqu una valiosa fuente de informacin para aumentar sus conocimientos y sobre todo si lo llevan a cabo para desarrollar a futuro sus propias aplicaciones. Para empezar les comentare que NETBEANS es un SW de aplicacin para programacin grafica en java, que quiere decir esto para los nuevos, esta aplicacin bsicamente agrega el cdigo que se requiere para objetos y grficos bsicos, como por ejemplo ventanas, botones, etiquetas, calendarios entre otros objetos, que nos harn mucho ms fcil la programacin y sobre todo se adaptaran a todo tipo de necesidades en aplicaciones locales. La principal desventaja ante esto es que si llegamos a borrar o aadir alguna llave sin cuidado podra generarnos un sinfn de errores y si no se tiene practica para encontrar errores podra arruinar por completo nuestra aplicacin hacindola inservible es decir no podramos ejecutarla. Bueno empecemos una vez instalada la aplicacin, generaremos un nuevo proyecto y aparecer una nueva ventana en la cual elegiremos de la lista que la aplicacin ser de java y ser una aplicacin de escritorio de java y le damos siguiente.

Despus en la siguiente ventana cambiaremos el nombre de la aplicacin y para nuestro caso particular se llamara RFC, notaremos que una vez cambien el nombre de la aplicacin tambin se cambiara la carpeta donde se creara el proyecto colocando el nombre de nuestro proyecto y la clase de aplicacin haciendo referencia a la clase main que es necesaria en todas las aplicaciones de java. Una vez cambiemos el nombre damos clic en el botn terminar.

Nota: Recuerda que java es un lenguaje de programacin multiplataforma es decir que da igual que ejecutes tu programa, en Linux que Windows o MAC igual funcionara. Ahora colocaremos los siguientes objetos para poder dar pauta a la programacin y aunque t puedes ordenar estos objetos como gustes te recomiendo que identifiques que objetos usas por nombre y nmero porque en el cdigo es importante a que objetos hagamos referencia durante la ejecucin. Para este ejemplo utilizare los siguientes objetos.
3 jTextBox 6 Label (etiquetas) 3 jComboBox 1 Botn

CODIGO PARA OBTENER EL RFC EN NETBEANS

// dentro del botn en el evento MouseClicked incluiremos el siguiente cdigo //Esta lnea se coloca por default al crear el evento mouseClicked private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { //Se declaran las Variables de tipo cadena String : RFC, Apaterno, RFC1 y nombreC y una de tipo char RFC inicializada en X.

String RFC = ""; String Apaterno; String RFC1; char RFC2 = 'X'; String nombreC = ""; //se abre un metodo try en caso de que se genere un error al capturer el contenido del jTextField1 y que el programa no colapse. try { // Se guarda el valor del la caja de texto1 en la variable Apaterno. Apaterno = jTextField1.getText(); //Se convierte la variable a paterno en un arreglo de tipo char llamado ap*+ el cual se declara en el mismo momento. char ap[] = Apaterno.toCharArray(); //La variable nombreC guarda el contenido de la variable Apaterno para utilizarla despues nombreC = Apaterno; // El contenido de la etiqueta 6 se pone en blanco para eliminar cualquier tipo de basura. jLabel6.setText(""); //En la variable RFC1 se guarda el primer valor del RFC sacado del primer valor del arreglo de ap que debe de contener la primera letra del apellido paterno RFC1 = "" + ap[0]; //Se agrega a la variable RFC el primer valor del RFC contenido en la variable RFC1 RFC = RFC1; // Se declara una variable booleana llamda sigue y se inicializa con el valor true(verdadero) boolean sigue = true; //Se declara una variable i de tipo entero y se inicializa en 1 int i=1; // Este procedimiento captura la primera vocal del apellido paterno contenido en el jTextBox1

//Se utiliza un ciclo while con las condicionales (sigue == true) & (i <= ap.length-1) que significan mientras sigue es igual a verdadero e i menos o igual a la longitud del arreglo de tipo chara p-1 continuara con el procedimiento. El (-1) se debe a que la propiedad de longitud de la variable empieza con 1 pero el primer valor del arreglo ap se inicia en 0. while ( (sigue == true) & (i <= ap.length-1) ){ RFC2 = ap[i]; // La variable RFC2 toma el valor contenido en ap[i] // Esta condicional compara el varlor contenido en RFC2 proveniente de ap*i+ con las vocales maysculas no es necesario las minsculas porque todos los valores se convierten a maysculas antes de usarse en el mtodo del boton if ((RFC2 == 'A') || (RFC2 == 'E') || (RFC2 == 'I') || (RFC2 == 'O') || (RFC2 == 'U')){ //Si la condicional resulta ser verdadera entonces se agrega a la variable RFC, que ya contiene el valor de RFC1 el valor de RFC2 y cambia el estado de la variable sigue a falso RFC = RFC + RFC2; sigue = false; // En caso de que no se cumpla la condicin se aplica el mtodo else }else { //Dentro de este mtodo se aplica una condicional que dice que si i es igual a la longitud total del arreglo ap -1 (es decir si no hay mas letras en el arreglo) y si la longitud total del arrglo ap es mayor a 2(Es decir que si el apellido tiene mas de 3 letras) entonces: sigue se hara falso y RFC2 tendra el valor de X esto es en base al manual del RFC if ((i == ap.length-1) & (ap.length > 2)){ sigue = false; RFC2 = 'X'; //finalmente se agrega el valor de RFC2 a la variable RFC RFC = RFC + RFC2; } //Si al terminar este metodo no se cumple con ninguna de las condiciones se apliica que si el valor de i es igual a la longitud del arreglo ap y esta longitud es menor o igual a dos letras entonces sigue ser igual a falso y RFC obtendr un valor de - . Es decir que si ya no hay mas letras y el apellido tiene menos de dos letras entonces RFC obtiene un guion como valor

if ((i == ap.length-1) & (ap.length <= 2)){ sigue = false; RFC2 = '-'; } } i++; // i se incrementa de uno en uno para ir recorriendo los valores de ap } }catch(Exception e){ // en caso de que no se haya podido capturar el valor de jTextBox porque no existe entonces se registra un mensaje que dice que debe escribir el apellido para poder ejecutar el programa JOptionPane.showMessageDialog(null,"Debes de escribir tu apellido paterno" ); } // Una vez obetnidos los primeros valores del rfc, se declaran las variables Amaterno y RFC3 String Amaterno; String RFC3; try{ //Se inicia el mtodo try para capturar algn error en caso de que se genere al obtener el valor del jTextField2 que contendr el apellido materno //Se captura el varlo del jTextField2 en la variable Amaterno Amaterno = jTextField2.getText(); // Se agrega a la variable nombreC el valor de la variable Amaterno con su respectivo espacio para separar el contenido ya existente en la variable nombreC = nombreC + " " + Amaterno; //Se convierte la variable Amaterno en un arreglo de char llamado am char[] am = Amaterno.toCharArray(); //Se enva el primer valor del arreglo am a la variable tipo char RFC3 para tener la primera letra el apellido materno. RFC3 = "" + am[0];

//Se agrega el valor de RFC3 a la variable RFC para continuar con la formacion del rfc RFC = RFC + RFC3; } //En caso de que no exista el apellido materno catch(Exception e){ //RFC toma el valor de X RFC3 = "X"; // se agrega el Valor de RFC3 a la variable RFC RFC = RFC + RFC3; } // Se inicia ahora otro metodo try para campturar el valor de jTextField3 y si surge un error en la captura el programa no colapse try { //Se inicializan la variable nombre de tipo cadena que contendra el valor del jTextField3 agregando un (espacio) para que no genere conflicto con el tipo de variable. String nombre = jTextField3.getText() + ""; //Se convierte la variable nombre en un arreglo de char con el nombre name char[] name = nombre.toCharArray(); //Se agrega a nombreC la variable nombre, para que con esto se tenga el nombre completo de la persona. nombreC = nombreC + " " + nombre; //Se agrega el primer valor del arreglo name a la variable RFC4 y este a su vez se aade a la variable RFC String RFC4 = "" + name[0]; RFC = RFC + RFC4; //En este caso recapitulando cuando capturarmos el valor del apellido materno en caso de no haber la variable RFC obtenia un valor de - en este caso si la condicional es verdadera entonces:

if (RFC2 == '-'){ // Se declara una variable llamada RFCExt y contendr el segundo valor de la variable name que es la segunda letra del nombre. String RFCExt = "" + name[1]; //Finalmente se agrega este valor al RFC RFC = RFC + RFCExt; }

//En caso de que la catura del jTextField3 falle porque no existe }catch(Exception e){ //Se enva a pantalla el mensaje de solicitud de nombre JOptionPane.showMessageDialog(null,"Debes de escribir tu Nombre" ); } // Se incia un Nuevo metodo try para capturar errores al seleccionar la fecha de nacimiento try{ //Se declaran las variables String day, month, year, RFC5, RFC6, RFC7y8, RFC9y10; //La variable year toma el contenido de la seleccion del jComboBox2 year = String.valueOf( jComboBox2.getSelectedItem()); // Se declara la variable ao que es un arreglo que contendra los valores de la variable year char[] ao = year.toCharArray(); //Donde la variable RFC5 tomara el valor 3 del arrglo de ao para capturar el penltimo numero del ao y lo mismo para RFC6 que tomara el ultimo valor para tener los dos dgitos del ao correspondiente a la fecha de nacimiento RFC5 = "" + ao[2]; RFC6 = "" + ao[3]; // Se agrega al RFC los dos dgitos del ao

RFC= RFC + RFC5 + RFC6; //Se agrega a la variable month el contenido del jComboBox3 para saber el mes month = String.valueOf( jComboBox3.getSelectedItem() ) ; // Se compara con la condicional el valor de la cadena de la variable month con la cadena del nombre del mes y se le asigna a la variable month el par de nmeros correspondientes. if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("ENERO")){ month = "01"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("FEBRERO")){ month = "02"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("MARZO")){ month = "03"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("ABRIL")){ month = "04"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("MAYO")){ month = "05"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("JUNIO")){ month = "06"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("JULIO")){ month = "07"; }

if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("AGOSTO")){ month = "08"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("SEPTIEMBRE")){ month = "09"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("OCTUBRE")){ month = "10"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("NOVIEMBRE")){ month = "11"; } if ((String.valueOf( jComboBox3.getSelectedItem() )).equals("DICIEMBRE")){ month = "12"; } //La variable RFC7y8 toma el valor contenido en la variable month RFC7y8 = month; //Se aade al RFC la variable RFC7y8 para tener el par de numeros del mes RFC = RFC + RFC7y8; //Se captura el varlor del dia en la variable day proveniente de jComboBox1 day = String.valueOf( jComboBox1.getSelectedItem()); // si la variable day es igual a dia o month igual a mes entonces el jlabel6 se deja en blanco y se pide al usuario que seleccione su fecha de naciemiento completa if (day.equals("DIA") || month.equals("MES")){ jLabel6.setText("");

JOptionPane.showMessageDialog(null,"Debes de seleccionar tu fecha de nacimiento completa" ); //En caso contrario RFC9y10 tomara el valor de day que corresponden a dia de nacimiento }else{ RFC9y10 = day; //Se aade al RFC el valor de la variable RFC9y10 RFC = RFC + RFC9y10; } // en caso de haber algun error durante el procedimiento de captura de la fecha de nacimiento entonces }catch(Exception e){ //Se deja la etiqueta 6 en blanco y se solicita que se seleccione la fecha de nacimiento correctamente jLabel6.setText(""); JOptionPane.showMessageDialog(null,"Debes de seleccionar tu fecha de nacimiento completa" ); } // Calculo de digitos de la homoclave //Se crea una tabla de tipo String con dimensiones de 39 renglones y 2 columnas, el valor de esta tabla se obtiene del manual del RFC String[][] Tabla1 = new String[39][2]; Tabla1[0][0] = " "; Tabla1[0][1] = "00"; Tabla1[1][0] = "0"; Tabla1[1][1] = "00"; Tabla1[2][0] = "1"; Tabla1[2][1] = "01";

Tabla1[3][0] = "2"; Tabla1[3][1] = "02"; Tabla1[4][0] = "3"; Tabla1[4][1] = "03"; Tabla1[5][0] = "4"; Tabla1[5][1] = "04"; Tabla1[6][0] = "5"; Tabla1[6][1] = "05"; Tabla1[7][0] = "6"; Tabla1[7][1] = "06"; Tabla1[8][0] = "7"; Tabla1[8][1] = "07"; Tabla1[9][0] = "8"; Tabla1[9][1] = "08"; Tabla1[10][0] = "9"; Tabla1[10][1] = "09"; Tabla1[11][0] = "&"; Tabla1[11][1] = "10"; Tabla1[12][0] = "A"; Tabla1[12][1] = "11"; Tabla1[13][0] = "B"; Tabla1[13][1] = "12"; Tabla1[14][0] = "C"; Tabla1[14][1] = "13"; Tabla1[15][0] = "D"; Tabla1[15][1] = "14";

Tabla1[16][0] = "E"; Tabla1[16][1] = "15"; Tabla1[17][0] = "F"; Tabla1[17][1] = "16"; Tabla1[18][0] = "G"; Tabla1[18][1] = "17"; Tabla1[19][0] = "H"; Tabla1[19][1] = "18"; Tabla1[20][0] = "I"; Tabla1[20][1] = "19"; Tabla1[21][0] = "J"; Tabla1[21][1] = "21"; Tabla1[22][0] = "K"; Tabla1[22][1] = "22"; Tabla1[23][0] = "L"; Tabla1[23][1] = "23"; Tabla1[24][0] = "M"; Tabla1[24][1] = "24"; Tabla1[25][0] = "N"; Tabla1[25][1] = "25"; Tabla1[26][0] = "O"; Tabla1[26][1] = "26"; Tabla1[27][0] = "P"; Tabla1[27][1] = "27"; Tabla1[28][0] = "Q"; Tabla1[28][1] = "28";

Tabla1[29][0] = "R"; Tabla1[29][1] = "29"; Tabla1[30][0] = "S"; Tabla1[30][1] = "32"; Tabla1[31][0] = "T"; Tabla1[31][1] = "33"; Tabla1[32][0] = "U"; Tabla1[32][1] = "34"; Tabla1[33][0] = "V"; Tabla1[33][1] = "35"; Tabla1[34][0] = "W"; Tabla1[34][1] = "36"; Tabla1[35][0] = "X"; Tabla1[35][1] = "37"; Tabla1[36][0] = "Y"; Tabla1[36][1] = "38"; Tabla1[37][0] = "Z"; Tabla1[37][1] = "39"; Tabla1[38][0] = ""; Tabla1[38][1] = "40"; //Se crea una segunda tabla de tipo String con dimensiones de 34 renglones y 2 columnas, el valor de esta tabla se obtiene del manual del RFC String[][] Tabla2 = new String[34][2]; Tabla2[0][0] = "0"; Tabla2[0][1] = "1"; Tabla2[1][0] = "1";

Tabla2[1][1] = "2"; Tabla2[2][0] = "2"; Tabla2[2][1] = "3"; Tabla2[3][0] = "3"; Tabla2[3][1] = "4"; Tabla2[4][0] = "4"; Tabla2[4][1] = "5"; Tabla2[5][0] = "5"; Tabla2[5][1] = "6"; Tabla2[6][0] = "6"; Tabla2[6][1] = "7"; Tabla2[7][0] = "7"; Tabla2[7][1] = "8"; Tabla2[8][0] = "8"; Tabla2[8][1] = "9"; Tabla2[9][0] = "9"; Tabla2[9][1] = "A"; Tabla2[10][0] = "10"; Tabla2[10][1] = "B"; Tabla2[11][0] = "11"; Tabla2[11][1] = "C"; Tabla2[12][0] = "12"; Tabla2[12][1] = "D"; Tabla2[13][0] = "13"; Tabla2[13][1] = "E"; Tabla2[14][0] = "14";

Tabla2[14][1] = "F"; Tabla2[15][0] = "15"; Tabla2[15][1] = "G"; Tabla2[16][0] = "16"; Tabla2[16][1] = "H"; Tabla2[17][0] = "17"; Tabla2[17][1] = "I"; Tabla2[18][0] = "18"; Tabla2[18][1] = "J"; Tabla2[19][0] = "19"; Tabla2[19][1] = "K"; Tabla2[20][0] = "20"; Tabla2[20][1] = "L"; Tabla2[21][0] = "21"; Tabla2[21][1] = "M"; Tabla2[22][0] = "22"; Tabla2[22][1] = "N"; Tabla2[23][0] = "23"; Tabla2[23][1] = "P"; Tabla2[24][0] = "24"; Tabla2[24][1] = "Q"; Tabla2[25][0] = "25"; Tabla2[25][1] = "R"; Tabla2[26][0] = "26"; Tabla2[26][1] = "S"; Tabla2[27][0] = "27";

Tabla2[27][1] = "T"; Tabla2[28][0] = "28"; Tabla2[28][1] = "U"; Tabla2[29][0] = "29"; Tabla2[29][1] = "V"; Tabla2[30][0] = "30"; Tabla2[30][1] = "W"; Tabla2[31][0] = "31"; Tabla2[31][1] = "X"; Tabla2[32][0] = "32"; Tabla2[32][1] = "Y"; Tabla2[33][0] = "33"; Tabla2[33][1] = "Z"; //Se crea una tercera tabla de tipo String con dimensiones de 39 renglones y 2 columnas, el valor de esta tabla se obtiene del manual del RFC String[][] Tabla3 = new String[39][2]; Tabla3[0][0] = "0"; Tabla3[0][1] = "00"; Tabla3[1][0] = "1"; Tabla3[1][1] = "1"; Tabla3[2][0] = "2"; Tabla3[2][1] = "2"; Tabla3[3][0] = "3"; Tabla3[3][1] = "3"; Tabla3[4][0] = "4"; Tabla3[4][1] = "4";

Tabla3[5][0] = "5"; Tabla3[5][1] = "5"; Tabla3[6][0] = "6"; Tabla3[6][1] = "6"; Tabla3[7][0] = "7"; Tabla3[7][1] = "7"; Tabla3[8][0] = "8"; Tabla3[8][1] = "8"; Tabla3[9][0] = "9"; Tabla3[9][1] = "9"; Tabla3[10][0] = "A"; Tabla3[10][1] = "10"; Tabla3[11][0] = "B"; Tabla3[11][1] = "11"; Tabla3[12][0] = "C"; Tabla3[12][1] = "12"; Tabla3[13][0] = "D"; Tabla3[13][1] = "13"; Tabla3[14][0] = "E"; Tabla3[14][1] = "14"; Tabla3[15][0] = "F"; Tabla3[15][1] = "15"; Tabla3[16][0] = "G"; Tabla3[16][1] = "16"; Tabla3[17][0] = "H"; Tabla3[17][1] = "17";

Tabla3[18][0] = "I"; Tabla3[18][1] = "18"; Tabla3[19][0] = "J"; Tabla3[19][1] = "19"; Tabla3[20][0] = "K"; Tabla3[20][1] = "20"; Tabla3[21][0] = "L"; Tabla3[21][1] = "21"; Tabla3[22][0] = "M"; Tabla3[22][1] = "22"; Tabla3[23][0] = "N"; Tabla3[23][1] = "23"; Tabla3[24][0] = "&"; Tabla3[24][1] = "24"; Tabla3[25][0] = "O"; Tabla3[25][1] = "25"; Tabla3[26][0] = "P"; Tabla3[26][1] = "26"; Tabla3[27][0] = "Q"; Tabla3[27][1] = "27"; Tabla3[28][0] = "R"; Tabla3[28][1] = "28"; Tabla3[29][0] = "S"; Tabla3[29][1] = "29"; Tabla3[30][0] = "T"; Tabla3[30][1] = "30";

Tabla3[31][0] = "U"; Tabla3[31][1] = "31"; Tabla3[32][0] = "V"; Tabla3[32][1] = "32"; Tabla3[33][0] = "W"; Tabla3[33][1] = "33"; Tabla3[34][0] = "X"; Tabla3[34][1] = "34"; Tabla3[35][0] = "Y"; Tabla3[35][1] = "35"; Tabla3[36][0] = "Z"; Tabla3[36][1] = "36"; Tabla3[37][0] = " "; Tabla3[37][1] = "37"; Tabla3[38][0] = ""; Tabla3[38][1] = "38"; // CONVIRTIENDO EL NOMBRE A NUMEROS SEGUN LA TABLA 1 DEL MANUAL DEL RFC PARA DIGITOS DE HOMONOMIA //Se crea una variable llamada conv1 de primera conversin y se inicializa en 0. String conv1 = "0"; //Se convierte la variable nombreC que ahora contiene el nombre completo de la persona en un arreglo de tipo char llamado nombreCTabla1. char[] nombreCTabla1 = nombreC.toCharArray(); //Se inicializan las variables i y f en 0 para fila y columna int i = 0; int f = 0;

//Mientras i sea menor que la longitud de del arreglo nombreCTabla1 y f sea menor que 39 entonces continuara con el procedimiento. Esto significa que el procedimiento se har mientras i no sea mayor al nmero de caracteres en el nombre y que f sea menor a la cantidad de renglones con carcter en la tabla 1entonces while( ( i < nombreCTabla1.length) && (f < 39) ){ //f ser igual a cero y la variable sigue ser igual a true. f = 0; boolean sigue = true; //ahora mientras sigue sea verdadera while(sigue == true ){

//Dado que la tabla tiene un valor de tipo String y que requerimos solo comparar una letra, convertiremos el contenido de Tabla en una posicin especfica a un arreglo de char, denotando que la posicin 0 hace referencia a la comuna uno del rengln y 1 a la columna dos del rengln de cada tabla char[] letra = Tabla1[f][0].toCharArray(); //Se compara que la letra obtenida de la tabla sea igual a la letra contenida en la posicin del arreglo nombreCTabla1, si la letra resulta ser la misma entonces if(letra[0] == nombreCTabla1[i]){ //conv1 ser igual al contenido de la tabla1 en la misma posicin del rengln en que la letra es igual pero en la comuna dos para conseguir el nmero al que es equivalente cada letra, conforme se repita el proceso, se irn agregando los valores y no se sustituirn conv1 = conv1 + Tabla1[f][1]; //Una vez agregado el valor correspondiente a esta letra la variable sigue se hace falsa sigue = false; } //En caso de que no sea igual la letra a la letra en el nombreCTabla1 en la posicin indicada entonces f se incrementa en uno para compararla con la letra de otro rengln segn la tabla1 f = f + 1;

// Si este proceso se relaiza mas de 38 veces y ninguna letra es igual a la especificada en la variable nombreCTabla1 entonces if(f > 38){ //La variable sigue se hace falsa y se indica que existen caracteres no permitidos en el nombre provenientes de acentos o caracteres especiales sigue = false; JOptionPane.showMessageDialog(null,"Existen caracteres no permitidos en tu nombre" ); } } //Mientras nombreCTabla1 uno no sea convertido por completo la variable i se incrementara en uno hasta terminar la conversin i = i+1; } //realizando sumas en pares //Una vez tengamos la conversin completa esta se almacenara en un arreglo de tipo char llamado par. char[] par = conv1.toCharArray(); i = 0; //inicializamos la variable i en cero y declaramos la variable suma inicializndola en cero int suma = 0; //Ahora mientras i sea menor que la longitude de la variable par 1 que contiene la conversin completa del nombre se ejecutara lo siguiente while(i < par.length-1){ // Se declara las variables uno y dos, donde uno es igual a la variable par en i es decir que uno tomara el numero contenido en par en la posicion i String uno = "" + par[i]; Uno sera igual al numero aadido antes y se le concatenara el numero contenido en la siguiente posicion de par. (75 = 7 + 5) para formar un numero de dos digitos uno = uno + par[i+1];

//Dos sera igual al segundo digito de uno o par en la posicion (i + 1) String dos = par[i+1] + ""; //Finalmente suma sera igual a al valor de suma que originalmente es cero mas el valor de la variable uno convertido a entero por el valor de dos convertido en entero para poder realizar operaciones matematicas suma = suma + Integer.parseInt(uno) * Integer.parseInt(dos); // Para seguir con el procedimiento hasta convertir todo el nombre en una suma numrica se incrementa i de uno en uno. Este procedimiento esta deacuerdo con el manual del RFC i++; } // Una vez que se tiene la suma del nombre se crea una variable de tipo char llamada SufijoSuma que tendra como valor la suma antes realizada para esto convertimos suma de tipo entero a un String char[] SufijoSuma = String.valueOf(suma).toCharArray(); Se declara una variable llamada dividend y se inicializa en un espacio vacio. String dividendo = ""; //En la variable dividendo se aaden los ltimos tres valores del arreglo de SufijoSuma para obtener un numero de tres dgitos, esto segn el manual del RFC. Esto lo hice con un ciclo for inicializando i en la longitud de la variable SufijoSuma 3, despus se seala que el ciclo se repetir hasta llegar al ltimo valor de longitud de SufijoSuma y que los valores se irn concatenando de uno en uno. (Ej. 56178 = 178) for(i = SufijoSuma.length-3; i <= SufijoSuma.length-1; i++){ dividendo = dividendo + SufijoSuma[i]; } //obteniendo residuo //Para esto convertimos la variable dividendo en un tipo entero, este nmero se dividir entre 34, este nmero est indicado en el manual del RFC, y el residuo obtenido por el operador % se almacenara en la variable residuo. La variable residuo se declara como entero para eliminar los decimales int residuo = Integer.parseInt(dividendo) % 34;

//obteniendo cociente //De la misma forma que lo anterior convertimos la variable dividendo en entero y luego realizamos una divisin normal entre 34, para obtener el cociente, la variable cociente deber declararse como entero para eliminar los decimales. int cociente = Integer.parseInt(dividendo) / 34; // Obteniendo primeros dos dgitos de la homonimia //Declaramos e inicializamos las siguientes variables String digitoHomo1 = "", digitoHomo2 = ""; f = 0; boolean sigue = true; int t = 0; // Utilizamos un ciclo while con la condicin de que se ejecute mientras sigue sea igual a verdadero while(sigue == true ){ // Ahora si la tabla 2 contiene en la posicion (f,0) el numero igual al cociente obtenido anteriormente entonces if(Tabla2[f][0].equals(String.valueOf(cociente)) ){ //El valor de digitoHomo1 sera igual al valor de la tabla 2 en la posicion (f,1) correspondiente a la conversion que ofrece la tabla 2 del manual del RFC siendo este un numero o una letra digitoHomo1 = Tabla2[f][1]; //La variable t se incrementa para indicar que el digito ya se encontr t = t + 1; } //El procedimiento anterior se realiza con el residuo para obtener el digitoHomo2 if(Tabla2[f][0].equals(String.valueOf(residuo)) ){ digitoHomo2 = Tabla2[f][1]; //La variable t se incrementa para indicar que el digito ya se encontr

t = t + 1; } //Para realizar este proceso hasta dar con la letra en cuestin se incrementa la variable t de uno en uno f = f + 1; // Si el procedimiento se realiza mas de 33 veces o t es igual a dos entonces se detiene el ciclo while al pasar la variable sigue a false if((f > 33) || (t == 2)){ sigue = false; } } //Ahora se agrega al RFC los dos dgitos nuevos de homonimia encontrados RFC = RFC + digitoHomo1 + digitoHomo2; // Calculo del digito verificador // CONVIRTIENDO EL RFC de 12 posiciones A NUMEROS SEGUN LA TABLA 3 DEL MANUAL DEL RFC PARA DIGITO VERIFICADOR //Se declara la variable conv2 de tipo arreglo entero de 12 posiciones int[] conv2 = new int[12]; // Se convierte el RFC en un arreglo de tipo char llamado rfc char[] rfc = RFC.toCharArray(); //Se declaran las variables i y f, inicializndolas en 0 i = 0; f = 0; // Se utiliza un ciclo while para convertir ahora el RFC en valores numericos para esto mientras i sea menor que 12 indicando los 12 digitos del RFC hasta el momento y que f sea menor a 39 indicando el maximo numero de caracteries para la conversion entonces while( ( i < 12) && (f < 39) ){

//Se inicializan las variables f y sigue f = 0; sigue = true; //ahora mientras sigue sea verdadero while(sigue == true ){ //El valor de la tabla 3 segn el manual del RFC en la posicin (f,0) se convierte en un arreglo de tipo char llamdo letra para poder compararlo. char[] letra = Tabla3[f][0].toCharArray(); //Si letra es igual al valor de rfc en i entonces if(letra[0] == rfc[i]){ conv2 en I ser igual al valor numrica de la tabla 3 en la posicin (f,1) correspondiente a la letra encontrada en el rfc y terminando el ciclo haciendo la variable sigue falsa conv2[i] = Integer.parseInt(Tabla3[f][1]); sigue = false; } //Para poder comparar cada valor del rfc con el de la tabla 3 se incrementa f para ir avanzando por la table. f = f + 1; } //Para convertir todas las letras del rfc en numeros segun la tabla 3 del manual del RFC i se incrementa en 1. i = i+1; } //La variable suma se inicializa en 0 y f en 13 suma = 0; f = 13; //Utilizando un ciclo for aplicamos la ecuacion propuesta en el manual del RFC

for(i = 0; i < rfc.length; i++ ){ // Ej. Suma = 0 + 5*13 suma = suma + conv2[i] * f; //f se ira decrementando segn la formula propuesta. Ej. (suma = 65 + 3*12).. f--; } //ahora se obtiene el residuo de la sumatoria entre 11, este numero es dado por el manual del RFC residuo = suma % 11; // Declaramos una variable llamada verificador String verificador; //Este digito cuenta con las siguientes reglas : Si residuo es igual a 1 entonces el digito sera = A if (residuo == 1){ verificador = "A"; } Si el residuo es igual a cero entonces el digito verificador sera igual a cero else if(residuo == 0){ verificador = "0"; //Y para cualquier otro caso diferente se le resta el residuo al numero 11 }else{ verificador = String.valueOf(11-residuo); } //Este finalmente el digito verificador se agrega al RFC completando toda la secuencia y asi obteniendo el RFC RFC = RFC + verificador; // Aplicando formato al RFC //Declaramos una variable llamada RFCcon Formato y se inicializa vacia

String RFCconFormato = ""; //Se convierte en un arreglo de tipo char el Nuevo valor del RFC char[] FormatoRFC = String.valueOf(RFC).toCharArray(); //Utilizando un ciclo for colocaremos guiones en el RFC para que se separe el nombre, de la fecha de nacimiento y finalmente de los dgitos de homonomia for(i = 0; i < 13; i++){ //Se agregan los digitos de RFC a RFCconFormato RFCconFormato = RFCconFormato + FormatoRFC[i]; //Cuando llegue a las posiciones 4 y 10 if(i == 3 || i == 9){ //A RFCconFormato se le agrega un guion medio para completar el formato RFCconFormato = RFCconFormato + "-"; } } Finalmente se imprime en la etiqueta 6 (jLabel6) el valor del RFCconFormato para que el usuario lo vea jLabel6.setText(RFCconFormato); } //Fin del mtodo de accin de botn //Se abre en el jTextField1 el metodo perder foco es decir cuando se selecciona otro objeto entonces private void jTextField1FocusLost(java.awt.event.FocusEvent evt) { //Dentro de este mtodo incluimos este cdigo que convierte cualquier texto escrito en el jTextField1 en maysculas y si ya est en maysculas no realiza ninguna accin. jTextField1.setText(jTextField1.getText().toUpperCase()); } // El mismo cdigo anterior se incluye en los dems jTextField para obtener el mismo efecto en todos los datos agregados por el usuario, para no tener conflictos con el cdigo realizado anteriormente.

private void jTextField2FocusLost(java.awt.event.FocusEvent evt) { jTextField2.setText(jTextField2.getText().toUpperCase()); here: } private void jTextField3FocusLost(java.awt.event.FocusEvent evt) { jTextField3.setText(jTextField3.getText().toUpperCase()); here: } Ejemplo del programa que acabamos de elaborar: // TODO add your handling code // TODO add your handling code

Conclusin
As es como terminamos nuestra actividad del da de hoy, espero les haya sido de ayuda, se que a lo largo de esta programacin se encontrara con errores inesperados y situaciones a las que cada uno de ustedes tendr que investigar y superar ya que la programacin no siempre se presenta igual para todos, pero sin duda alguna saldrn un gran nmero de errores que ustedes deberan ir identificando y resolviendo poco a poco como parte de la formacin. Como ayuda a su problema fuera de mi cdigo encontr un error al enviar mensajes en pantalla al usuario de forma grfica por lo cual si llegan a tener

algn error en el cdigo o la ejecucin de estos mensajes verifiquen que tengan la siguiente librera activa es decir que forme parte de sus libreras al incio del programa

import javax.swing.JOptionPane;
Esta lnea ira al final de todas sus paqueteras de java que incluye netbeans por defecto, si ya la tienen y no funciona escrbanla manualmente y eliminen la lnea existente, esto soluciono mi problema espero les sea de ayuda.

Cualquier duda por favor enviar un correo a angel_death_kyo@hotmail.com, este programa fue desarrollado con fines educativos as que puede ser mejorado y no incluye todas las reglas incluidas en el manual del RFC. Elaborado por: Ramrez Franco, Luis Andrs. 07/05/11

Você também pode gostar