Foros del Web » Programación para mayores de 30 ;) » Programación General »

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

Estas en el tema de Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ? en el foro de Programación General en Foros del Web. 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 ...

  #31 (permalink)  
Antiguo 15/02/2007, 13:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 78
Antigüedad: 17 años, 9 meses
Puntos: 0
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
  #32 (permalink)  
Antiguo 15/02/2007, 13:47
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 19 años, 4 meses
Puntos: 50
Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?

claro que si, parseando codigo, espere por favor...
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #33 (permalink)  
Antiguo 16/02/2007, 05:01
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?

Cita:
Iniciado por erick_arcini Ver Mensaje
claro que si, parseando codigo, espere por favor...
Mejor que espere sentado
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #34 (permalink)  
Antiguo 21/05/2007, 10:36
 
Fecha de Ingreso: mayo-2007
Mensajes: 1
Antigüedad: 17 años, 6 meses
Puntos: 0
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);
}
  #35 (permalink)  
Antiguo 05/06/2007, 14:43
 
Fecha de Ingreso: junio-2007
Ubicación: en una casa
Mensajes: 42
Antigüedad: 17 años, 5 meses
Puntos: 0
Pregunta Re: Calcular Digitoverificador RFC - CURP

Cita:
Iniciado por robertocorona Ver Mensaje
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
  #36 (permalink)  
Antiguo 06/06/2007, 11:16
 
Fecha de Ingreso: junio-2007
Ubicación: en una casa
Mensajes: 42
Antigüedad: 17 años, 5 meses
Puntos: 0
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 Ver Mensaje
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
  #37 (permalink)  
Antiguo 30/01/2008, 17:34
 
Fecha de Ingreso: enero-2008
Mensajes: 1
Antigüedad: 16 años, 9 meses
Puntos: 0
Busqueda 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
  #38 (permalink)  
Antiguo 19/02/2008, 02:45
 
Fecha de Ingreso: febrero-2008
Ubicación: U.s.A. !!!
Mensajes: 19
Antigüedad: 16 años, 9 meses
Puntos: 0
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
  #39 (permalink)  
Antiguo 03/04/2008, 13:31
 
Fecha de Ingreso: abril-2008
Mensajes: 2
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?

Cita:
Iniciado por webbeginner Ver Mensaje
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
  #40 (permalink)  
Antiguo 03/04/2008, 13:34
 
Fecha de Ingreso: abril-2008
Mensajes: 2
Antigüedad: 16 años, 7 meses
Puntos: 0
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?
  #41 (permalink)  
Antiguo 17/04/2008, 17:09
 
Fecha de Ingreso: abril-2008
Mensajes: 2
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?

Cita:
Iniciado por haydee268 Ver Mensaje
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
  #42 (permalink)  
Antiguo 10/05/2008, 23:43
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homoclave ?

Cita:
Iniciado por haydee268 Ver Mensaje
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.
  #43 (permalink)  
Antiguo 31/05/2008, 20:28
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Antigüedad: 16 años, 5 meses
Puntos: 0
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.
  #44 (permalink)  
Antiguo 05/06/2008, 14:35
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 9 meses
Puntos: 50
Respuesta: Alguien tiene el algoritmo para obtener R.F.C. Mexicano con todo y homocla

Cita:
Iniciado por JAVY_66 Ver Mensaje
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?
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #45 (permalink)  
Antiguo 09/08/2008, 00:53
Avatar de raynaud  
Fecha de Ingreso: agosto-2008
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 0
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/
  #46 (permalink)  
Antiguo 26/09/2008, 22:38
 
Fecha de Ingreso: septiembre-2008
Mensajes: 1
Antigüedad: 16 años, 1 mes
Puntos: 0
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
  #47 (permalink)  
Antiguo 03/03/2009, 16:12
 
Fecha de Ingreso: marzo-2009
Mensajes: 1
Antigüedad: 15 años, 8 meses
Puntos: 0
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]
  #48 (permalink)  
Antiguo 04/03/2009, 12:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 1
Antigüedad: 15 años, 8 meses
Puntos: 0
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;
*/
?>
  #49 (permalink)  
Antiguo 11/04/2009, 13:05
 
Fecha de Ingreso: abril-2005
Mensajes: 23
Antigüedad: 19 años, 7 meses
Puntos: 0
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 4 personas (incluyéndote)




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