aquí les dejo el código en Javascript que me encontré y he podido verificar que funciona! no es mio, yo no lo escribí sólo se los comparto.
saludos.
(les dejo el código en dos partes porque al parecer no cabe :P)
Código:
function obtieneRFC(forma, pstRFC){ with (forma) { var fecha = dsFechaNac.value; var sexo = idSexo.value; var estado = idEstadoNac.value; var nombre = dsNombre.value; var paterno = dsPaterno.value; var materno = dsMaterno.value; } fecha = fecha.substring(6)+"-"+fecha.substring(3,5)+"-"+fecha.substring(0,2); if (sexo == 1){ sexo = "H"; } if (sexo == 2){ sexo = "M"; } switch (estado){ case "1": estado = "AS"; break; case "2": estado = "BC"; break; case "3": estado = "BS"; break; case "4": estado = "CC"; break; case "5": estado = "CS"; break; case "6": estado = "CH"; break; case "7": estado = "CL"; break; case "8": estado = "CM"; break; case "9": estado = "DF"; break; case "10": estado = "DG"; break; case "11": estado = "GT"; break; case "12": estado = "GR"; break; case "13": estado = "HG"; break; case "14": estado = "JC"; break; case "15": estado = "MC"; break; case "16": estado = "MN"; break; case "17": estado = "MS"; break; case "18": estado = "NT"; break; case "19": estado = "NL"; break; case "20": estado = "OC"; break; case "21": estado = "PL"; break; case "22": estado = "QT"; break; case "23": estado = "QR"; break; case "24": estado = "SP"; break; case "25": estado = "SL"; break; case "26": estado = "SR"; break; case "27": estado = "TC"; break; case "28": estado = "TS"; break; case "29": estado = "TL"; break; case "30": estado = "VZ"; break; } pstRFC.value = fnCalculaCURP( nombre, paterno, materno, fecha, sexo, estado ).substring(0,10); } function obtieneCURP(forma, pstCURP){ with (forma) { var fecha = dsFechaNac.value; var sexo = idSexo.value; var estado = idEstadoNac.value; var nombre = dsNombre.value; var paterno = dsPaterno.value; var materno = dsMaterno.value; } fecha = fecha.substring(6)+"-"+fecha.substring(3,5)+"-"+fecha.substring(0,2); if (sexo == 1){ sexo = "H"; } if (sexo == 2){ sexo = "M"; } switch (estado){ case "1": estado = "AS"; break; case "2": estado = "BC"; break; case "3": estado = "BS"; break; case "4": estado = "CC"; break; case "5": estado = "CS"; break; case "6": estado = "CH"; break; case "7": estado = "CL"; break; case "8": estado = "CM"; break; case "9": estado = "DF"; break; case "10": estado = "DG"; break; case "11": estado = "GT"; break; case "12": estado = "GR"; break; case "13": estado = "HG"; break; case "14": estado = "JC"; break; case "15": estado = "MC"; break; case "16": estado = "MN"; break; case "17": estado = "MS"; break; case "18": estado = "NT"; break; case "19": estado = "NL"; break; case "20": estado = "OC"; break; case "21": estado = "PL"; break; case "22": estado = "QT"; break; case "23": estado = "QR"; break; case "24": estado = "SP"; break; case "25": estado = "SL"; break; case "26": estado = "SR"; break; case "27": estado = "TC"; break; case "28": estado = "TS"; break; case "29": estado = "TL"; break; case "30": estado = "VZ"; break; } pstCURP.value = fnCalculaCURP( nombre, paterno, materno, fecha, sexo, estado ); } function fnCalculaCURP( pstNombre, pstPaterno, pstMaterno, dfecha, pstSexo, pnuCveEntidad ) { /* pstNombre="MARIA TERESITA DEL NIÑO JESUS"; pstPaterno="AGUERREBERE"; pstMaterno="BARROSO"; dfecha="1937-11-22"; pstSexo = "M"; pnuCveEntidad ="DF"; pstNombre="ROCIO"; pstPaterno="URIBARREN"; pstMaterno="AGUERREBERE"; dfecha="1969-02-03"; pstSexo = "M"; pnuCveEntidad ="DF"; pstNombre="AINHOA"; pstPaterno="ESTURAU"; pstMaterno="URIBARREN"; dfecha="2003-03-05"; pstSexo = "M"; pnuCveEntidad ="QR"; pstNombre="MARIO"; pstPaterno="PIÑA"; pstMaterno="FLORES"; dfecha="1968-03-30"; pstSexo = "H"; pnuCveEntidad ="DF"; */ pstCURP =""; pstDigVer =""; contador =0; contador1 =0; pstCom =""; numVer =0.00; valor =0; sumatoria =0; // se declaran las varibale que se van a utilizar para ontener la CURP NOMBRES =""; APATERNO =""; AMATERNO =""; T_NOMTOT =""; NOMBRE1 =""; //PRIMER NOMBRE NOMBRE2 =""; //DEMAS NOMBRES NOMBRES_LONGITUD =0; //LONGITUD DE TODOS @NOMBRES var NOMBRE1_LONGITUD =0; //LONGITUD DEL PRIMER NOMBRE(MAS UNO,EL QUE SOBRA ES UN ESPACIO EN BLANCO) APATERNO1 =""; //PRIMER NOMBRE APATERNO2 =""; //DEMAS NOMBRES APATERNO_LONGITUD =0; //LONGITUD DE TODOS @NOMBRES APATERNO1_LONGITUD =0; //LONGITUD DEL PRIMER NOMBRE(MAS UNO,EL QUE SOBRA ES UN ESPACIO EN BLANCO) AMATERNO1 =""; //PRIMER NOMBRE AMATERNO2 =""; //DEMAS NOMBRES AMATERNO_LONGITUD =0; //LONGITUD DE TODOS @NOMBRES AMATERNO1_LONGITUD =0; //LONGITUD DEL PRIMER NOMBRE(MAS UNO,EL QUE SOBRA ES UN ESPACIO EN BLANCO) VARLOOPS =0; //VARIABLE PARA LOS LOOPS, SE INICIALIZA AL INICIR UN LOOP // Se inicializan las variables para obtener la primera parte de la CURP NOMBRES = pstNombre.replace(/^\s+|\s+$/g,""); APATERNO = pstPaterno.replace(/^\s+|\s+$/g,""); AMATERNO = pstMaterno.replace(/^\s+|\s+$/g,""); T_NOMTOT = APATERNO + ' '+ AMATERNO + ' '+ NOMBRES; // Se procesan los nombres de pila VARLOOPS = 0; while (VARLOOPS != 1) { NOMBRES_LONGITUD = NOMBRES.length var splitNombres = NOMBRES.split(" "); var splitNombre1 = splitNombres[0]; NOMBRE1_LONGITUD = splitNombre1.length; // NOMBRE1_LONGITUD = PATINDEX('% %',@NOMBRES) if (NOMBRE1_LONGITUD = 0) { NOMBRE1_LONGITUD = NOMBRES_LONGITUD; } NOMBRE1 = NOMBRES.substring(0,splitNombre1.length); NOMBRE2 = NOMBRES.substring(splitNombre1.length + 1, NOMBRES.length); // Se quitan los nombres de JOSE, MARIA,MA,MA. /* if (NOMBRE1 IN ('JOSE','MARIA','MA.','MA','DE','LA','LAS','MC','VON','DEL','LOS','Y','MAC','VAN') && NOMBRE2 != '') { NOMBRES = NOMBRE2 } else { VARLOOPS = 1 } */ if (NOMBRE1 == 'JOSE' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'MARIA' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'MA.' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'MA' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'DE' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'LA' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'LAS' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'MC' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'VON' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'DEL' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'LOS' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'Y' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'MAC' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } if (NOMBRE1 == 'VAN' && NOMBRE2 != '') { NOMBRES = NOMBRE2; } else { VARLOOPS = 1; } } // fin varloops <> 1 // Se procesan los APELLIDOS, PATERNO EN UN LOOP VARLOOPS = 0; while (VARLOOPS != 1) { //SET @APATERNO_LONGITUD = LEN(@APATERNO) APATERNO_LONGITUD = APATERNO.length; //SET @APATERNO1_LONGITUD = PATINDEX('% %',@APATERNO) var splitPaterno = APATERNO.split(" "); var splitPaterno1 = splitPaterno[0]; APATERNO1_LONGITUD = splitPaterno1.length; if (APATERNO1_LONGITUD = 0) { APATERNO1_LONGITUD = APATERNO_LONGITUD; } // APATERNO1 = RTRIM(LEFT(@APATERNO,@APATERNO1_LONGITUD)) // APATERNO2 = LTRIM(RIGHT(@APATERNO,@APATERNO_LONGITUD - @APATERNO1_LONGITUD)) APATERNO1 = APATERNO.substring(0,splitPaterno1.length); APATERNO2 = APATERNO.substring(splitPaterno1.length + 1, APATERNO.length);