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);
 
 

 les dejo código para Calcular CURP y RFC
 les dejo código para Calcular CURP y RFC 

 Respuesta: les dejo código para Calcular CURP y RFC
 Respuesta: les dejo código para Calcular CURP y RFC  
 
