Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Programación General (http://www.forosdelweb.com/f14/)
-   -   Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ? (http://www.forosdelweb.com/f14/alguien-tiene-algoritmo-para-obtener-r-f-c-mexicano-con-todo-homoclave-317714/)

Eric Gonzalez 15/02/2007 13:40

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
Oigan necesito crear el RFC en visual 6.0, veo que pusieron el codigo peo como hago para que genere la funcion de rfc espero y me ayuden saludos

erick_arcini 15/02/2007 13:47

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
claro que si, parseando codigo, espere por favor...

Eternal Idol 16/02/2007 05:01

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
Cita:

Iniciado por erick_arcini (Mensaje 1894878)
claro que si, parseando codigo, espere por favor...

:-D :-D :-D Mejor que espere sentado :-D :-D :-D

hawk.isc 21/05/2007 10:36

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
Aquí está el código en Java, tienen que validar en su forma no aceptar acentos o remplazar las letras con acentos porque esto influye en el cálculo de la homoclave, no sé que pasa con la Ñ alguien sabe?

//Calcula el RFC de una persona física su homoclave incluida.
public String CalcularRFC(String nombre, String apellidoPaterno, String apellidoMaterno, String fecha) {
//Cambiamos todo a mayúsculas
nombre = nombre.toUpperCase();
apellidoPaterno = apellidoPaterno.toUpperCase();
apellidoMaterno = apellidoMaterno.toUpperCase();

//RFC que se regresa
String rfc = "";

//Quitamos los espacios al principio y final del nombre y apellidos
nombre = nombre.trim();
apellidoPaterno = apellidoPaterno.trim();
apellidoMaterno = apellidoMaterno.trim();

//Quitamos los artículos de los apellidos, incluye los de nombres extranjeros
apellidoPaterno = QuitarArticulos(apellidoPaterno);
apellidoMaterno = QuitarArticulos(apellidoMaterno);

//Agregamos el primer caracter del apellido paterno
rfc = apellidoPaterno.substring(0,1);

//Buscamos y agregamos al rfc la primera vocal del primer apellido
for(int i = 0; i < apellidoPaterno.length(); i++) {
if (EsVocal(apellidoPaterno.charAt(i))) {
rfc += apellidoPaterno.charAt(i);
break;
}
}

//Agregamos el primer caracter del apellido materno
rfc += apellidoMaterno.substring(0, 1);

//Agregamos el primer caracter del primer nombre
rfc += ignoraNombreComun(nombre);

//agregamos la fecha en formato yymmdd
rfc += fecha.substring(4,6) + fecha.substring(2,4) + fecha.substring(0,2);

//Le agregamos la homoclave al rfc
rfc=CalcularHomoclave(apellidoPaterno + " " + apellidoMaterno + " " + nombre, fecha, rfc);

return rfc;
}

// Calcula la homoclave
private String CalcularHomoclave(String nombreCompleto, String fecha, String rfc) {

//Guardara el nombre en su correspondiente numérico
StringBuilder nombreEnNumero = new StringBuilder(); ;

//La suma de la secuencia de números de nombreEnNumero
long valorSuma = 0;

//Tablas para calcular la homoclave
Hashtable tablaRFC1 = new Hashtable();
tablaRFC1.put("&", "10");
tablaRFC1.put("Ñ", "10");
tablaRFC1.put("A", "11");
tablaRFC1.put("B", "12");
tablaRFC1.put("C", "13");
tablaRFC1.put("D", "14");
tablaRFC1.put("E", "15");
tablaRFC1.put("F", "16");
tablaRFC1.put("G", "17");
tablaRFC1.put("H", "18");
tablaRFC1.put("I", "19");
tablaRFC1.put("J", "21");
tablaRFC1.put("K", "22");
tablaRFC1.put("L", "23");
tablaRFC1.put("M", "24");
tablaRFC1.put("N", "25");
tablaRFC1.put("O", "26");
tablaRFC1.put("P", "27");
tablaRFC1.put("Q", "28");
tablaRFC1.put("R", "29");
tablaRFC1.put("S", "32");
tablaRFC1.put("T", "33");
tablaRFC1.put("U", "34");
tablaRFC1.put("V", "35");
tablaRFC1.put("W", "36");
tablaRFC1.put("X", "37");
tablaRFC1.put("Y", "38");
tablaRFC1.put("Z", "39");
tablaRFC1.put("0", "0");
tablaRFC1.put("1", "1");
tablaRFC1.put("2", "2");
tablaRFC1.put("3", "3");
tablaRFC1.put("4", "4");
tablaRFC1.put("5", "5");
tablaRFC1.put("6", "6");
tablaRFC1.put("7", "7");
tablaRFC1.put("8", "8");
tablaRFC1.put("9", "9");

//TablaRFC 2
Hashtable tablaRFC2 = new Hashtable();
tablaRFC2.put("0", "1");
tablaRFC2.put("1", "2");
tablaRFC2.put("2", "3");
tablaRFC2.put("3", "4");
tablaRFC2.put("4", "5");
tablaRFC2.put("5", "6");
tablaRFC2.put("6", "7");
tablaRFC2.put("7", "8");
tablaRFC2.put("8", "9");
tablaRFC2.put("9", "A");
tablaRFC2.put("10", "B");
tablaRFC2.put("11", "C");
tablaRFC2.put("12", "D");
tablaRFC2.put("13", "E");
tablaRFC2.put("14", "F");
tablaRFC2.put("15", "G");
tablaRFC2.put("16", "H");
tablaRFC2.put("17", "I");
tablaRFC2.put("18", "J");
tablaRFC2.put("19", "K");
tablaRFC2.put("20", "L");
tablaRFC2.put("21", "M");
tablaRFC2.put("22", "N");
tablaRFC2.put("23", "P");
tablaRFC2.put("24", "Q");
tablaRFC2.put("25", "R");
tablaRFC2.put("26", "S");
tablaRFC2.put("27", "T");
tablaRFC2.put("28", "U");
tablaRFC2.put("29", "V");
tablaRFC2.put("30", "W");
tablaRFC2.put("31", "X");
tablaRFC2.put("32", "Y");

//TablaRFC 3
Hashtable tablaRFC3 = new Hashtable();
tablaRFC3.put("A", "10");
tablaRFC3.put("B", "11");
tablaRFC3.put("C", "12");
tablaRFC3.put("D", "13");
tablaRFC3.put("E", "14");
tablaRFC3.put("F", "15");
tablaRFC3.put("G", "16");
tablaRFC3.put("H", "17");
tablaRFC3.put("I", "18");
tablaRFC3.put("J", "19");
tablaRFC3.put("K", "20");
tablaRFC3.put("L", "21");
tablaRFC3.put("M", "22");
tablaRFC3.put("N", "23");
tablaRFC3.put("O", "25");
tablaRFC3.put("P", "26");
tablaRFC3.put("Q", "27");
tablaRFC3.put("R", "28");
tablaRFC3.put("S", "29");
tablaRFC3.put("T", "30");
tablaRFC3.put("U", "31");
tablaRFC3.put("V", "32");
tablaRFC3.put("W", "33");
tablaRFC3.put("X", "34");
tablaRFC3.put("Y", "35");
tablaRFC3.put("Z", "36");
tablaRFC3.put("0", "0");
tablaRFC3.put("1", "1");
tablaRFC3.put("2", "2");
tablaRFC3.put("3", "3");
tablaRFC3.put("4", "4");
tablaRFC3.put("5", "5");
tablaRFC3.put("6", "6");
tablaRFC3.put("7", "7");
tablaRFC3.put("8", "8");
tablaRFC3.put("9", "9");
tablaRFC3.put("", "24");
tablaRFC3.put(" ", "37");

//agregamos un cero al inicio de la representación númerica del nombre
nombreEnNumero.append(0);

//Recorremos el nombre y vamos convirtiendo las letras en
//su valor numérico
for(int i=0; i < nombreCompleto.length(); i++) {
if (tablaRFC1.containsKey(nombreCompleto.charAt(i)+"" ))
nombreEnNumero.append(tablaRFC1.get(nombreCompleto .charAt(i)+""));
else
nombreEnNumero.append("00");
}

//Calculamos la suma de la secuencia de números
//calculados anteriormente
//la formula es:
//( (el caracter actual multiplicado por diez)
//mas el valor del caracter siguiente )
//(y lo anterior multiplicado por el valor del caracter siguiente)
for (int i = 0; i < nombreEnNumero.length()-1; i++) {
valorSuma += ((Integer.parseInt(""+nombreEnNumero.charAt(i)) * 10) + Integer.parseInt(""+nombreEnNumero.charAt(i+1))) * Integer.parseInt(""+nombreEnNumero.charAt(i+1));
}

int div = 0, mod = 0;
div = (int)valorSuma % 1000;
mod = div % 34;
div = (div - mod) / 34;

int indice = 0;
String hc = ""; //los dos primeros caracteres de la homoclave
while (indice <= 1) {
if (tablaRFC2.containsKey(""+((indice == 0) ? div : mod)))
hc += tablaRFC2.get(""+((indice == 0) ? div : mod));
else
hc += "Z";
indice++;
}

//Agregamos al RFC los dos primeros caracteres de la homoclave
rfc += hc;

//Aqui empieza el calculo del digito verificador basado en lo que tenemos del RFC
int rfcAnumeroSuma = 0, sumaParcial = 0;
for (int i = 0; i < rfc.length(); i++) {
if (tablaRFC3.containsKey((""+rfc.charAt(i)))) {
rfcAnumeroSuma = Integer.parseInt((String)tablaRFC3.get(""+rfc.char At(i)));
sumaParcial += (rfcAnumeroSuma * (14 - (i + 1)));
}
}

int moduloVerificador = sumaParcial % 11;
if (moduloVerificador == 0)
rfc += "0";
else {
sumaParcial = 11 - moduloVerificador;
if (sumaParcial == 10)
rfc += "A";
else
rfc += sumaParcial;
}

return rfc;
}


// Verifica si el caracter pasado es una vocal
private boolean EsVocal(char letra) {
if (letra == 'A' || letra == 'E' || letra == 'I' || letra == 'O' || letra == 'U')
return true;
return false;
}

// Remplaza los artículos comúnes en los apellidos en México con caracter vacío ("").
private String QuitarArticulos(String palabra) {
return palabra.replace("DEL ", "").replace("LAS ", "").replace("DE ", "").replace("LA ", "").replace("Y ", "").replace("A ", "").replace("MC ","").replace("LOS ", "").replace("VON ","").replace("VAN ","");
}


//Regresa la primera vocal del primer nombre ignorando los nombres comunes como José o María
private char ignoraNombreComun(String nombre) {

String nombres[] = nombre.split("\\s");
if(nombres.length > 1)
if(nombres[0].equals("JOSE")||nombres[0].equals("MARIA")||nombres[0].equals("MA.")||nombres[0].equals("MA"))
return nombres[1].charAt(0);
return nombre.charAt(0);
}

Casper2007 05/06/2007 14:43

Re: Calcular Digitoverificador RFC - CURP
 
Cita:

Iniciado por robertocorona (Mensaje 1599936)
he logrado calcular el RFC con digito verificador
y he logrado calcular la CURP pero NO logro calcular el digito verificador, ¿alguien tendra un ejemplo de codigo en visual basic para calcularlo?


soy nuevo en el foro y necesito algun procedimiento para calcular el RFC y el digito verificador, ademas de la CURP....

De casualidad tendras el procedimiento para calcular el R.F.C. el curp en Delphi...

antes ya saludos y gracias

Casper2007 06/06/2007 11:16

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
De casualidad Myakire tendras este codigo de Fox en Delphi.... (codigo para generar RFC con Homoclave y digito Verificador segun hacienda en mexico) si lo tienes podrías pegas en el post??...

de momento Gracias

Cita:

Iniciado por Myakire (Mensaje 1188498)
Encontré este otro, pero esta en FOX

Código:

CODIGO DESARROLLADO EN VISUAL FOX PRO PARA GENERAR RFC CON HOMOCLAVE Y DIGITO VERIFICADOR SEGUN HACIENDA EN MEXICO


FUNCTION GENERA_RFC(CL_PAT,CL_MAT,CL_NOM,DL_FECNAC)
DIMENSION arre8(10),arre6(4),arre2(10),arre9(1),anex11(1),anex12(1),anex31(1),anex32(1)
arre8[1]="DE "
arre8[2]="DEL "
arre8[3]="LA "
arre8[4]="LOS "
arre8[5]="LAS "
arre8[6]="Y "
arre8[7]="MC "
arre8[8]="MAC "
arre8[9]="VON "
arre8[10]="VAN "

arre6[1]="JOSE "
arre6[2]="MARIA "
arre6[3]="J "
arre6[4]="MA "

arre2[1]="A"
arre2[2]="E"
arre2[3]="I"
arre2[4]="O"
arre2[5]="U"
arre2[6]="a"
arre2[7]="e"
arre2[8]="i"
arre2[9]="o"
arre2[10]="u"
arre9[1]=""
sino = "S"
malas ="BUEIBUEYCACACACOCAGACAGOCAKACAKOCOGECOJAKOGEKOJOKAKAKULOMAMEMAMO"
malas = malas +"MEARMEASMEONMIONCOJECOJICOJOCULOFETOGUEYJOTOKACAKACOKAGA"
malas = malas + "KAGOMOCOMULAPEDAPEDOPENEPUTAPUTOQULORATARUIN"
for x = 1 to Len(malas) step 4
DIMENSION arre9(X)
arre9(X)=SubStr(malas, x, 4)
next
anex11[1] = ''
anex12[1] = ''
taba11 = "*0123456789&\ABCDEFGHIJKLMNOPQRSTUVWXYZ"
taba12 = "000001020304050607080910101112131415161718192122232425262728293233343536373839"
for x = 1 to Len(taba11)
DIMENSION anex11(x),anex12(x)
anex11(x)=SubStr(taba11, x, 1)
two = x * 2 - 1
anex12(x)=SubStr(taba12, two, 2)
next
malas = ""
taba11 = ""
taba12 = ""
taba21 = "00010203040506070809101112131415161718192021222324252627282930313233"
taba22 = "123456789ABCDEFGHIJKLMNPQRSTUVWXYZ"
for x = 1 to Len(taba21) step 2
DIMENSION anex21(x),anex22(x)
anex21(x)=SubStr(taba21, x, 2)
two = ( x + 1 ) / 2
anex22(x)=SubStr(taba22, two, 1)
next
taba21 = ""
taba22 = ""
taba11 = "0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ*"
taba12 = "0001020304050607080910111213141516171819202122232425262728293031323334353637"
anex31(1) = ''
anex32(1) = ''
FOR x = 1 to Len(taba11)
DIMENSION anex31(x),anex32(x)
anex31(x)=SubStr(taba11, x, 1)
two = (x * 2) - 1
anex32(x)=SubStr(taba12, two, 2)
NEXT
STORE SPACE(0) TO taba11,taba12,wrfc,wnumer6,wlos3
STORE Space(30) TO wpaterno,wmaterno,wnombre,paterno,materno,nombre
mask = Replicate("!", 30)
wanual = VAL(STR(YEAR(dl_fecnac),4)+PADL(ALLTRIM(STR(MONTH(dl_Fecnac),2)),2,'0')+PADL(ALLTRIM(STR(DAY(dl_fecnac),2)),2,'0'))
wpaterno = CL_PAT
wmaterno = CL_MAT
wnombre = CL_NOM
IF nacio(wanual) = .F.
=MESSAGEBOX('La Fecha de Nacimiento es Incorrecta',16+0,'Error')
RETURN SPACE(0)
ENDIF
IF los3(wpaterno, wmaterno, wnombre) = .F.
=MESSAGEBOX('El Nombre del Empleado es Incorrecto',16+0,'Error')
RETURN SPACE(0)
ENDIF
finice = .F.
octava()
sexta()
tercera()
wbase = alltrim(alltrim(paterno) + " " + alltrim(materno) +" " + alltrim(nombre))
IF ( Len(paterno) = 0 .OR. Len(materno) = 0 )
septima()
finice = .T.
ENDIF
IF ( !finice )
IF ( Len(paterno) < 3 )
cuarta()
finice = .T.
ENDIF
ENDIF
IF ( !finice )
prime_segu()
ENDIF
RETURN wrfc
ENDFUNC

PROCEDURE SHOW_IT( Arg1 )
cuatro = SubStr(Arg1, 1, 4)
van = ascan(arre9, cuatro)
if ( van > 0 )
wrfc = stuff(wrfc, 4, 1, "X")
endif
homoni()
digito()
RETURN
ENDPROC
PROCEDURE PRIME_SEGU()
letra = SubStr(paterno, 2, 1)
for x = 2 to Len(paterno)
van = ascan(arre2, SubStr(paterno, x, 1))
if ( van > 0 )
letra = arre2[ van ]
x = Len(paterno) + 8
endif
next
wrfc = SubStr(paterno, 1, 1) + letra + SubStr(materno, 1, 1) + SubStr(nombre, 1, 1)
wrfc = wrfc + wnumer6 + "000"
show_it(wrfc)
RETURN
ENDPROC

PROCEDURE TERCERA()
IF ( SubStr(nombre, 1, 2) = "CH" )
nombre = stuff(nombre, 1, 2, "C")
ELSE
IF ( SubStr(nombre, 1, 2) = "LL" )
nombre = stuff(nombre, 1, 2, "L")
ENDIF
ENDIF
IF ( SubStr(paterno, 1, 2) = "CH" )
paterno = stuff(paterno, 1, 2, "C")
ELSE
IF ( SubStr(paterno, 1, 2) = "LL" )
paterno = stuff(paterno, 1, 2, "L")
ENDIF
ENDIF
IF ( SubStr(materno, 1, 2) = "CH" )
materno = stuff(materno, 1, 2, "C")
ELSE
IF ( SubStr(materno, 1, 2) = "LL" )
materno = stuff(materno, 1, 2, "L")
ENDIF
ENDIF
RETURN
ENDPROC

********************************
PROCEDURE CUARTA()
wrfc = SubStr(paterno, 1, 1) + SubStr(materno, 1, 1) +SubStr(nombre, 1, 2) + wnumer6 + "000"
show_it(wrfc)
RETURN
ENDPROC

********************************
PROCEDURE SEXTA()
posi = At(" ", nombre)
IF ( posi > 0 )
FOR xx = 1 to ALen(arre6,1)
nombre = strtran(nombre, arre6[xx])
NEXT
ENDIF
RETURN
ENDPROC

********************************
PROCEDURE SEPTIMA()
IF ( Len(paterno) = 0 .AND. Len(materno) > 0 )
unosolo = materno
ELSE
IF ( Len(paterno) > 0 .AND. Len(materno) = 0 )
unosolo = paterno
ENDIF
ELSE
unosolo = nombre
endif
wrfc = SubStr(unosolo, 1, 2) + SubStr(nombre, 1, 2) + wnumer6 + "000"
show_it(wrfc)
RETURN
ENDPROC

********************************
PROCEDURE OCTAVA()
FOR xx = 1 to aLen(arre8,1)
paterno = strtran(paterno, arre8[ xx ])
materno = strtran(materno, arre8[ xx ])
nombre = strtran(nombre, arre8[ xx ])
NEXT
RETURN
ENDPROC

Function NACIO( Arg1 )
LOCAL ll_error
DIMENSION Local1(12)
Local1(1)=31
Local1(2)=28
Local1(3)=31
Local1(4)=30
Local1(5)=31
Local1(6)=30
Local1(7)=31
Local1(8)=31
Local1(9)=30
Local1(10)=31
Local1(11)=30
Local1(12)=31
if ( Arg1 = 0 )
bb = .F.
else
todo = Str(Arg1, 8)
bb = .T.
uno = Val(SubStr(todo, 7, 2))
dos = Val(SubStr(todo, 5, 2))
tres = Val(SubStr(todo, 1, 4))
if ( Arg1 = 0 .OR. uno = 0 .OR. dos = 0 )
bb = .F.
ELSE
IF ( dos <= 0 .OR. dos > 12 )
bb = .F.
ELSE
bisies = Local1[ dos ]
sanual = Str(tres, 4)
sanual2 = Val(sanual)
if ( dos = 2 .AND. Int(sanual2 / 4) * 4 = sanual2 )
bisies = bisies + 1
endif
ENDIF
if ( bb )
if ( uno <= 0 .OR. uno > bisies )
bb = .F.
endif
endif
endif
if ( !bb )
=MESSAGEBOX('ERROR EN FECHA DE NACIMIENTO',16+0,'Error')
else
wnumer6 = SUBSTR(Str(tres, 4),3,2)
if ( dos < 10 )
wnumer6 = wnumer6 + "0" + Str(dos, 1)
else
wnumer6 = wnumer6 + Str(dos, 2)
endif
if ( uno < 10 )
wnumer6 = wnumer6 + "0" + Str(uno, 1)
else
wnumer6 = wnumer6 + Str(uno, 2)
endif
ENDIF
Return bb
ENDFUNC

Function LOS3( Arg1, Arg2, Arg3 )
paterno = Trim(Arg1)
materno = Trim(Arg2)
nombre = Trim(Arg3)
wlos3 = alltrim(alltrim(Arg1) + " " + alltrim(Arg2) + " " + ;
alltrim(Arg3))
wlos3 = strtran(wlos3, " ", " ")
IF ( Len(wlos3) <= 6 )
Return .F.
ENDIF
Return .T.
ENDFUNC


PROCEDURE HOMONI()
valores = "0"
wbase = alltrim(alltrim(wpaterno) + " " + alltrim(wmaterno) +" " + alltrim(wnombre))
FOR x = 1 TO Len(wbase)
unok = SubStr(wbase, x, 1)
IF ( unok = " " )
unok = "*"
ENDIF
van = ascan(anex11, unok)
IF ( van > 0 )
valores = valores + anex12[ van ]
ELSE
valores = valores + "00"
ENDIF
NEXT
sumas = 0
FOR x = 1 TO Len(valores) - 1
prod1 = Val(SubStr(valores, x, 2))
prod2 = Val(SubStr(valores, x + 1, 1))
prod3 = prod1 * prod2
sumas = sumas + prod3
NEXT
zumass = Str(sumas, 10, 0)
zumass = right(zumass, 3)
zumas = Val(zumass)
solotres = zumas
cociente = Int(solotres / 34)
residuo = solotres - cociente * 34
IF ( cociente < 10 )
wrok = "0" + Str(cociente, 1)
ELSE
wrok = Str(cociente, 2)
ENDIF
van = ascan(anex21, wrok)
IF ( van > 0 )
homo = anex22[ van ]
ELSE
homo = "1"
ENDIF
IF ( residuo < 10 )
wrok = "0" + Str(residuo, 1)
ELSE
wrok = Str(residuo, 2)
ENDIF
van = ascan(anex21, wrok)
IF ( van > 0 )
homo = homo + anex22[ van ]
ELSE
homo = homo + "1"
ENDIF
wrfc = SubStr(wrfc, 1, 10) + homo
RETURN
ENDPROC

PROCEDURE DIGITO()
valores = ""
FOR x = 1 TO Len(wrfc)
unok = SubStr(wrfc, x, 1)
IF unok = " "
unok = "*"
ENDIF
van = ascan(anex31, unok)
IF van > 0
valores = valores + anex32[ van ]
ELSE
valores = valores + "00"
ENDIF
NEXT
sumas = 0
trece = 13
FOR x = 1 TO 12
prod1 = Val(SubStr(valores, x * 2 - 1, 2))
prod3 = prod1 * trece
sumas = sumas + prod3
trece = trece - 1
NEXT
cociente = Int(sumas / 11)
residuo = Int(sumas) - cociente * 11
IF residuo = 0
dijito = "0"
ELSE
valor = 11 - residuo
IF ( valor = 10 )
dijito = "A"
ELSE
entrer = Str(valor, 10, 0)
dijito = right(entrer, 1)
ENDIF
ENDIF
wrfc = wrfc + dijito
RETURN
ENDPROC



tecnoruiz 30/01/2008 17:34

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
Hola que tal... oye disculpa me interesa el codigo de la homoclave pero soy principiante en esto, me gustaria si me lo puedes mandar a mi correo y si me lo puedes explicar un poco mas... gracias :-)

Klau_AM 19/02/2008 02:45

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
HOLA !
ESTE TEMA ME LLAMA MUCHO LA ATENCION !! ... SOBRE TODO PORQUE TENGO UNA TAREA QUE CONSISTE EN CREAR UN PROGRAMA QUE CALCULE EL CURP Y RL RFC!! .....
SOLAMENTE QUE COMO PRINCIPIANTE !! TENGO ALGUNAS DUDAS ??

************************************************** *

O.K. PRIMERO QUE NADA .. MI PROGRAMA ESTA HECHO EN VISUAL BASIC 6.0 !!!

YA KLCULE TODOS LOS OTROS CARACTERES !! SOLO ME FALTA LA HOMOCLAVE

haydee268 03/04/2008 13:31

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
Cita:

Iniciado por webbeginner (Mensaje 1182423)
Esa es mi pregunta.

Si alguien tiene el algoritmo o mejor aun el codigo de algun programa que obtenga el R.F.C. (Registro Federal de Contribuyentes) que incluya la homoclave (la homoclave son los ultimos 3 caracteres del RFC, y es para evitar duplicidad de RFC en caso de las personas que nacieron el mismo día y por coincdencia se llamen igual.

Gracias

HOLA TENGO UN ARCHIVO EN EXCEL DE RFC Y CURP pero yo no se donde busco el orgaritmo para publicarlos o igual se los puedo mandar por correo si a alguien le interesa... Saludos :si:

haydee268 03/04/2008 13:34

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
Hola A Todos, Yo Tengo Un Archivo De Excel Para Calcular Rfc Y Curp, Si Alguien Le Interesa Se Lo Puedo Mandar En Excel, Si Saben Como Rastrear El Olgaritmo Me Serviria Porque Me Gustaria Implementarlo En Un Archivo Pero Copio Todo Pero No Funsiona, Oviamente Porque No Se Copia Macros Olgaritmos O Formatos Condicionales O Algo Asi... Saluditos, A Alguien Le Interesa?

lgarciaq1963 17/04/2008 17:09

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
Cita:

Iniciado por haydee268 (Mensaje 2348855)
Hola A Todos, Yo Tengo Un Archivo De Excel Para Calcular Rfc Y Curp, Si Alguien Le Interesa Se Lo Puedo Mandar En Excel, Si Saben Como Rastrear El Olgaritmo Me Serviria Porque Me Gustaria Implementarlo En Un Archivo Pero Copio Todo Pero No Funsiona, Oviamente Porque No Se Copia Macros Olgaritmos O Formatos Condicionales O Algo Asi... Saluditos, A Alguien Le Interesa?


mandamelo a mi corrreo y busco el codigo de la macro en excel y te mando....


mi correo es [email protected]

Mi nombre es: Luis Melchor García Quinto y trabajo para la Universidad en Tamaulipas

jorgeebh 10/05/2008 23:43

Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?
 
Cita:

Iniciado por haydee268 (Mensaje 2348855)
Hola A Todos, Yo Tengo Un Archivo De Excel Para Calcular Rfc Y Curp, Si Alguien Le Interesa Se Lo Puedo Mandar En Excel, Si Saben Como Rastrear El Olgaritmo Me Serviria Porque Me Gustaria Implementarlo En Un Archivo Pero Copio Todo Pero No Funsiona, Oviamente Porque No Se Copia Macros Olgaritmos O Formatos Condicionales O Algo Asi... Saluditos, A Alguien Le Interesa?

Hola. me interesa tu archivo en excel. Por favor mandamelo a [email protected]
muchas gracias.

JAVY_66 31/05/2008 20:28

Respuesta: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homocla
 
La verdad les estaria infinita y eternamente agradecido si me pudieran proporcinar el código en lenguaje C , de preferencia con funciones y arreglos y usando el compilador Dev-C++, mismo del que les podría proporcionar la página . Digamos que todavía no estoy nuy inmerso en esto de la programación, por eso necesito que el código no sea muy sofisticado, sino facil de compremder, y con sus respectivos comentarios claro. Hay algo más que no me imagino como hacer, se si alguien ingresa un dato invalido, como por ejemplo que en el estado escriba Inglaterra, lógicamente Inglaterra no es un estado de México, asi que en este caso se imprimiría un aviso de error para que volviera a ingresar los datos, esto supongo que es con repetitivas, y no se si tenga que declarar una matriz o vector inicializados con los nombres de los estados y si no se encuentra allí marque error, creo que sería algo así.

En cuanto a la homoclave y al dígito verificador nos dijo que incluso podíamos generar números aleatorios.

Además al último tiene que dar la opción de calcular otra curp.

No se si sea mucho pedir, pero lo repito estaré eternamente agradecido.

RootK 05/06/2008 14:35

Respuesta: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homocla
 
Cita:

Iniciado por JAVY_66 (Mensaje 2429323)
La verdad les estaria infinita y eternamente agradecido si me pudieran proporcinar el código en lenguaje C , de preferencia con funciones y arreglos y usando el compilador Dev-C++, mismo del que les podría proporcionar la página . Digamos que todavía no estoy nuy inmerso en esto de la programación, por eso necesito que el código no sea muy sofisticado, sino facil de compremder, y con sus respectivos comentarios claro. Hay algo más que no me imagino como hacer, se si alguien ingresa un dato invalido, como por ejemplo que en el estado escriba Inglaterra, lógicamente Inglaterra no es un estado de México, asi que en este caso se imprimiría un aviso de error para que volviera a ingresar los datos, esto supongo que es con repetitivas, y no se si tenga que declarar una matriz o vector inicializados con los nombres de los estados y si no se encuentra allí marque error, creo que sería algo así.

En cuanto a la homoclave y al dígito verificador nos dijo que incluso podíamos generar números aleatorios.

Además al último tiene que dar la opción de calcular otra curp.

No se si sea mucho pedir, pero lo repito estaré eternamente agradecido.

algo más ?? o ya con eso es suficiente?

raynaud 09/08/2008 00:53

Respuesta: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homocla
 
hola a todos este es un buen sitio para programadores y como tal en este casoe n particular del rfc los que buscan solo el dato vayan a los sitios de descarga oficial ya que es libre, ahora los que buscan implementar rfc o calculo de rfc masivo y no uno por uno, osea para programadores aki les dejo algo que no eh visto en este post
un proyecto de vb6 ya compilado para solo ejecutar y ver mejor como funciona

saludos a todos, bye

no programadores
http://www.aplicarh.com/

programadores
http://ezquizoofrenia.iespana.es/rfc.rar

o visiten mi foro
http://ezquizoofrenia.iespana.es/

ayudapati 26/09/2008 22:38

Respuesta: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homocla
 
hola,
aqui esta un programa (ampliamente probado) rfc 13 posiciones, curp (tip) y hasta el digito verificador del imss. AH, y es gratis.

http://www.elvallesepintadeverde.com

javier82_bruce 03/03/2009 16:12

Re: Si me interesa
 
Hola si me interesa el archivo de excel, si fueras tan amable de enviarmelo a mi correo estaria mas que agredecido

[email protected]

cyberquito 04/03/2009 12:50

Respuesta: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homocla
 
Y yo me tomé la libertad en contertirlo en código PHP.

Código PHP:

<?php
#Algoritmo basado en c#
#Hecho por: Quito Marzo 2009, [email protected].
 
function rfcset($a,$b) { #una manera de asignar defaults. 
        
if (!$a) return $b; else return $a;
    }
    
 class 
RFC {
    var 
$nombre,$apellidoPaterno$apellidoMaterno$fecha,$rfc;
    
    function 
RFC ($nombre,$apellidoPaterno$apellidoMaterno$fecha) { #formato de fecha: YYYY-MM-DD
         
$this->nombre strtoupper(trim($nombre));
        
//Quitamos los artículos de los apellidos
        
        
$this->apellidoPaterno $this->QuitarArticulos(strtoupper(trim($apellidoPaterno)));
        
$this->apellidoMaterno $this->QuitarArticulos(strtoupper(trim($apellidoMaterno)));
        
        
//Agregamos el primer caracter del apellido paterno
         
$this->rfc=substr($this->apellidoPaterno,0,1);
         
         
//Buscamos y agregamos al rfc la primera vocal del primer apellido
        
for ($i=0;$i<strlen($this->apellidoPaterno);$i++) {
            
$c=$this->apellidoPaterno[$i];
            if (
$this->EsVocal($c)) {
                
$this->rfc.=$c;
                break;
            }
        }
        
//Agregamos el primer caracter del apellido materno
        
$this->rfc.=substr($this->apellidoMaterno,0,1);
        

        
//Agregamos el primer caracter del primer nombre
        
$this->rfc.=substr($this->nombre,0,1);

        
//Agregamos la fecha yyyy-mm-dd (por ejemplo: 1968-08-25 = 25 de agosto de 1968 ); por si las dudas, ponemos un cero a la izquierda de los meses y dias < 10
        
$efecha=explode("-",$fecha);$efecha[0]=substr($efecha[0],2,2);$efecha[1]=str_pad($efecha[1],2,'0',STR_PAD_LEFT);$efecha[2]=str_pad($efecha[2],2,'0',STR_PAD_LEFT);
        
$fecha=implode("",$efecha);
        
$this->rfc.=$fecha;
        
        
//Le agregamos la homoclave al rfc 
        
$homoclave=$this->CalcularHomoclave($this->apellidoPaterno " " $this->apellidoMaterno " " $this->nombre$this->fecha);
        
$this->rfc.=$homoclave;
         
     }
#
     
    
    
function EsVocal($letra) {
        
$letra=strtoupper($letra);
        
$vocales=array("A","E","I","O","U","Á","É","Í","Ó","Ú");
        if (
in_array($letra,$vocales)) 
            return 
true;
        else 
            return 
false;
    }
#

    
function QuitarArticulos($palabra) {
        
$articulos=array("DEL ","LAS ","DE ","LA ","Y ","A ");
        
$palabra=str_replace($articulos,"",$palabra);
        return 
$palabra;
    }
#
    
function CalcularHomoclave($nombreCompleto$fecha) {
        
        
$nombreEnNumero=""//Guardara el nombre en su correspondiente numérico
        
$valorSuma 0//La suma de la secuencia de números de nombreEnNumero

        #region Tablas para calcular la homoclave. Estas tablas realmente no se porque son como son. solo las copie de lo que encontré en internet

        #region TablaRFC 1
        
$tablaRFC1 = array();
        
$tablaRFC1["&"]=10;
        
$tablaRFC1["Ñ"]=10;
        
$tablaRFC1["A"]=11;
        
$tablaRFC1["B"]=12;
        
$tablaRFC1["C"]=13;
        
$tablaRFC1["D"]=14;
        
$tablaRFC1["E"]=15;
        
$tablaRFC1["F"]=16;
        
$tablaRFC1["G"]=17;
        
$tablaRFC1["H"]=18;
        
$tablaRFC1["I"]=19;
        
$tablaRFC1["J"]=21;
        
$tablaRFC1["K"]=22;
        
$tablaRFC1["L"]=23;
        
$tablaRFC1["M"]=24;
        
$tablaRFC1["N"]=25;
        
$tablaRFC1["O"]=26;
        
$tablaRFC1["P"]=27;
        
$tablaRFC1["Q"]=28;
        
$tablaRFC1["R"]=29;
        
$tablaRFC1["S"]=32;
        
$tablaRFC1["T"]=33;
        
$tablaRFC1["U"]=34;
        
$tablaRFC1["V"]=35;
        
$tablaRFC1["W"]=36;
        
$tablaRFC1["X"]=37;
        
$tablaRFC1["Y"]=38;
        
$tablaRFC1["Z"]=39;
        
$tablaRFC1["0"]=0;
        
$tablaRFC1["1"]=1;
        
$tablaRFC1["2"]=2;
        
$tablaRFC1["3"]=3;
        
$tablaRFC1["4"]=4;
        
$tablaRFC1["5"]=5;
        
$tablaRFC1["6"]=6;
        
$tablaRFC1["7"]=7;
        
$tablaRFC1["8"]=8;
        
$tablaRFC1["9"]=9;
        
#endregion

        #region TablaRFC 2
        
$tablaRFC2 = array();
        
$tablaRFC2[0]= "1";
        
$tablaRFC2[1]= "2";
        
$tablaRFC2[2]= "3";
        
$tablaRFC2[3]= "4";
        
$tablaRFC2[4]= "5";
        
$tablaRFC2[5]= "6";
        
$tablaRFC2[6]= "7";
        
$tablaRFC2[7]= "8";
        
$tablaRFC2[8]= "9";
        
$tablaRFC2[9]= "A";
        
$tablaRFC2[10]= "B";
        
$tablaRFC2[11]= "C";
        
$tablaRFC2[12]= "D";
        
$tablaRFC2[13]= "E";
        
$tablaRFC2[14]= "F";
        
$tablaRFC2[15]= "G";
        
$tablaRFC2[16]= "H";
        
$tablaRFC2[17]= "I";
        
$tablaRFC2[18]= "J";
        
$tablaRFC2[19]= "K";
        
$tablaRFC2[20]= "L";
        
$tablaRFC2[21]= "M";
        
$tablaRFC2[22]= "N";
        
$tablaRFC2[23]= "P";
        
$tablaRFC2[24]= "Q";
        
$tablaRFC2[25]= "R";
        
$tablaRFC2[26]= "S";
        
$tablaRFC2[27]= "T";
        
$tablaRFC2[28]= "U";
        
$tablaRFC2[29]= "V";
        
$tablaRFC2[30]= "W";
        
$tablaRFC2[31]= "X";
        
$tablaRFC2[32]= "Y";
        
#endregion

        #region TablaRFC 3
        
$tablaRFC3 = array();
        
$tablaRFC3["A"]= 10;
        
$tablaRFC3["B"]= 11;
        
$tablaRFC3["C"]=12;
        
$tablaRFC3["D"]= 13;
        
$tablaRFC3["E"]= 14;
        
$tablaRFC3["F"]= 15;
        
$tablaRFC3["G"]= 16;
        
$tablaRFC3["H"]= 17;
        
$tablaRFC3["I"]= 18;
        
$tablaRFC3["J"]= 19;
        
$tablaRFC3["K"]= 20;
        
$tablaRFC3["L"]= 21;
        
$tablaRFC3["M"]= 22;
        
$tablaRFC3["N"]= 23;
        
$tablaRFC3["O"]= 25;
        
$tablaRFC3["P"]= 26;
        
$tablaRFC3["Q"]= 27;
        
$tablaRFC3["R"]= 28;
        
$tablaRFC3["S"]= 29;
        
$tablaRFC3["T"]= 30;
        
$tablaRFC3["U"]= 31;
        
$tablaRFC3["V"]= 32;
        
$tablaRFC3["W"]= 33;
        
$tablaRFC3["X"]= 34;
        
$tablaRFC3["Y"]= 35;
        
$tablaRFC3["Z"]= 36;
        
$tablaRFC3["0"]= 0;
        
$tablaRFC3["1"]= 1;
        
$tablaRFC3["2"]= 2;
        
$tablaRFC3["3"]= 3;
        
$tablaRFC3["4"]= 4;
        
$tablaRFC3["5"]= 5;
        
$tablaRFC3["6"]= 6;
        
$tablaRFC3["7"]= 7;
        
$tablaRFC3["8"]= 8;
        
$tablaRFC3["9"]= 9;
        
$tablaRFC3[""]= 24;
        
$tablaRFC3[" "]= 37;
        
#endregion

        //agregamos un cero al inicio de la representación númerica del nombre
        
$nombreEnNumero="0"

        
//Recorremos el nombre y vamos convirtiendo las letras en su valor numérico
        
for ($i=0;$i<strlen($nombreCompleto);$i++) {
            
$c=$nombreCompleto[$i];
            
$nombreEnNumero.=rfcset($tablaRFC1[$c],"00");
        }
            
        
//Calculamos la suma de la secuencia de números calculados anteriormente. 
        //la formula es:( (el caracter actual multiplicado por diez) mas el valor del caracter siguiente )
        //(y lo anterior multiplicado por el valor del caracter siguiente)
        /* codigo en c#
            valorSuma += ((Convert.ToInt32(nombreEnNumero[i].ToString()) * 10) + Convert.ToInt32(nombreEnNumero[i + 1].ToString())) * Convert.ToInt32(nombreEnNumero[i + 1].ToString());
        */
        
for ($i 0$i strlen($nombreEnNumero) - 1$i++) { $i2=$i+1;
            
$valorSuma+=(($nombreEnNumero[$i]*10) + $nombreEnNumero[$i2])*$nombreEnNumero[$i2];
            
        }
        
        
//Lo siguiente no se porque se calcula así, es parte del algoritmo.
        //Los magic numbers que aparecen por ahí deben tener algún origen matemático
        //relacionado con el algoritmo al igual que el proceso mismo de calcular el 
        //digito verificador.
        //Por esto no puedo añadir comentarios a lo que sigue, lo hice por acto de fe.

        
$div 0$mod 0;
        
$div $valorSuma 1000;
        
$mod $div 34;
        
$div = ($div $mod) / 34;
        
        
$hc "";  //los dos primeros caracteres de la homoclave
        
$hc.=rfcset($tablaRFC2[$div],"Z");
        
$hc.=rfcset($tablaRFC2[$mod],"Z");
        
        
/* codigo en c#
            while ($indice <= 1) {
                if (tablaRFC2.ContainsKey((indice == 0) ? div : mod))
                    hc += tablaRFC2[(indice == 0) ? div : mod];
                else
                    hc += "Z";
                indice++;
            }
        */

        //Agregamos al RFC los dos primeros caracteres de la homoclave
        
$rfc=$this->rfc;
        
$rfc.=$hc;

        
//Aqui empieza el calculo del digito verificador basado en lo que tenemos del RFC
        //En esta parte tampoco conozco el origen matemático del algoritmo como para dar 
        //una explicación del proceso, así que ¡tengamos fe hermanos!.
        
$rfcAnumeroSuma 0$sumaParcial 0;
        for (
$i 0$i strlen($rfc); $i++) {
            if (
$tablaRFC3[$rfc[$i]]) {
                
$rfcAnumeroSuma=$tablaRFC3[$rfc[$i]];
                
$sumaParcial += ($rfcAnumeroSuma * (14 - ($i 1)));
            }
        }

        
$moduloVerificador $sumaParcial 11;
        if (
$moduloVerificador == 0)
            
$hc.= "0";
        else {
            
$sumaParcial 11 $moduloVerificador;
            if (
$sumaParcial == 10)
                
$hc.= "A";
            else
                
$hc.= $sumaParcial;
        }

        return 
$hc;
    }
#

    
    
}##

?>
<?php
#ejemplo
/*
$nombre="ENRIQUE MURATH";
$apellidoPaterno="MERIDA";
$apellidoMaterno="DELGADO";
$fecha="1974-10-22";
$rfc= new RFC ($nombre,$apellidoPaterno, $apellidoMaterno, $fecha);
echo $rfc->rfc;
*/
?>


firestone2 11/04/2009 13:05

Respuesta: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homocla
 
El algoritmo se puede descargar desde aqui,
yo estube batallando mucho para encontrarlo, por eso lo posteo para evitarles a otros la perdida de tiempo.

w w w.sisi.org.mx/jspsi/documentos/2005/seguimiento/06101/0610100162005_065.doc


Este documento es el oficial ya que lo publico la SAT como respuesta a una solicitud interpuesta mediante el IFAI


La zona horaria es GMT -6. Ahora son las 22:37.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2025, Jelsoft Enterprises Ltd.