Funcion Javascript generar RFC y CURP

#1
Buenas compañeros,

Alguien de ustedes tendrá una función en Javascript para generar el RFC y el CURP???

He dado una buena buscada por google y no he podido encontrar una respuesta, encontré una función en Visual Basic, pero al quererla adaptar a Javascript me las vi dificil, no creo que no exista ya la función, sólo que no la he encontrado.

Gracias!!!!
 

Zephyros

Bovino de la familia
#2
Será tan difícil de programar?

La verdad no he utilizado javascript, pero en Java es muy sencillo hacer eso.
 

Zephyros

Bovino de la familia
#4
Desconozco los métodos para calcular el RFP y CURP, si dices que es tan fácil porque no me describes los métodos para hacer los cálculos.??
Tan fácil como esto:

1. Ingresar los datos del interesado. (Preferentemente en campos separados para que sea más sencillo su manejo).

2. Acorde a "las reglas" de cómo se estructuran tanto el RFC como el CURP, procesar los datos del interesado e ir generando los valores correspondientes.

3. Una vez generados los valores, guardarlos en una sola "string" (no encontré la palabra correcta en español, aunque le dicen "cadena").

Nada complicado verdad?
 
#5
Tan fácil como esto:

1. Ingresar los datos del interesado. (Preferentemente en campos separados para que sea más sencillo su manejo).

2. Acorde a "las reglas" de cómo se estructuran tanto el RFC como el CURP, procesar los datos del interesado e ir generando los valores correspondientes.

3. Una vez generados los valores, guardarlos en una sola "string" (no encontré la palabra correcta en español, aunque le dicen "cadena").

Nada complicado verdad?

jajajajaja, no seas mamon wey.......

Es obvio que no me refiero a eso, si no a cuales son las reglas de como se estructura el RFC y el CURP, si no pues vamos describiendo desde que le das archivo nuevo al editor hasta los eventos de los botones o las cajas de texto...
 

mrMushi

Bovino de alcurnia
#6
pues búsca en google.......

como se estructura el RFC y curp

si estas buscando que te lo codifiquen creo que va a ser dificil que te lo den.... (incluyendome..)

saludos
 
#9
Ya tengo las funciones para generar el RFC y la CURP, si alguien mas las necesita envíeme MP para pasarselas, ya que están medio largas y no puedo adjuntarlas.

Saludos!!
 
#12
Las funciones no las encontre en Javascript, están en PHP, son clases, pero igual me funcionaron porque use ajax para mostrar los datos. En un momento posteare las clases para el que las necesite, y si pudieramos irlas migrando a otros lenguajes, estaría perfecto...
 
#13
Esta clase es para generar el RFC, al final viene un ejemplo!!!
PHP:
<?php
 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="GUADALUPE";
$apellidoPaterno="CRUZ";
$apellidoMaterno="MORALES";
$fecha="1985-08-14";
$rfc= new RFC ($nombre,$apellidoPaterno, $apellidoMaterno, $fecha);
echo $rfc->rfc;
?>
 
#14
Esta es para generar la CURP, también al final viene un ejemplo de uso

PHP:
<?php
class B_CURP{
    var $CURP="";
    var $Nombre="";
    var $Ape1="";
    var $Ape2="";
    var $Sexo="";
    var $Dia=0;
    var $Mes=0;
    var $Anio=0;
    var $DatosExtras=array();
    var $errores=array();
    private $url0="http://curp.emexico.gob.mx:8080/CurpSP/curp2.do";
    private $url1="http://curp.emexico.gob.mx:8080/CurpSP/curp1.do";
    private $url="";
    private $Modo="GET";
    private $Entidades=array("AS", "BC", "BS", "CC", "CL", "CM", "CS", "CH", "DF", "DG", "GT", "GR", "HG", "JC", "MC", "MN", "MS", "NT", "NL", "OC", "PL", "QT", "QR", "SP", "SL", "SR", "TC", "TS", "TL", "VZ", "YN", "ZS", "SM", "NE");
    private $EntidadNom=array("AGUASCALIENTES","BAJA CALIFORNIA NTE.","BAJA CALIFORNIA SUR","CAMPECHE","COAHUILA","COLIMA","CHIAPAS","CHIHUAHUA","DISTRITO FEDERAL","DURANGO","GUANAJUATO","GUERRERO","HIDALGO","JALISCO","MEXICO","MICHOACAN","MORELOS","NAYARIT","NUEVO LEON","OAXACA","PUEBLA","QUERETARO","QUINTANA ROO","SAN LUIS POTOSI","SINALOA","SONORA","TABASCO","TAMAULIPAS","TLAXCALA","VERACRUZ","YUCATAN","ZACATECAS","SERV. EXTERIOR MEXICANO","NACIDO EN EL EXTRANJERO");
    private $Especiales="ÁÉÍÓÚÂÊÎÔÛÀÈÌÒÙÄËÏÖÜ";
    private $Lectura_Error="no se encuentra en la Base de Datos Nacional de la CURP";//key to find if it no exist don't to traslate
    function B_CURP(){
        $this->url=$this->url0;
    }
    function GetModo(){
        return $this->Modo;
    }
    function SetModo(){
        if($this->Modo=="POST")
            $this->Modo="GET";
        else 
            $this->Modo="POST";
        return $this->Modo;
    }
    public function SetDatos($Nombre="", $Ape1="", $Ape2="", $Sexo="", $Dia=0, $Mes=0, $Anio=0, $Entidad=0){
        $this->url=$this->url1;
        
        $Nombre=strtoupper(trim($Nombre));$Ape1=strtoupper(trim($Ape1));$Ape2=strtoupper(trim($Ape2));
        $Sexo=strtoupper(trim($Sexo));
        
        $Dia=(int)$Dia;$Mes=(int)$Mes;$Anio=(int)$Anio;
        
        if($Nombre=="") $this->errores[]="Error(8): El nombre no esta definido.";// the name is not defined
        if($Ape1=="") $this->errores[]="Error(9): El apellido no esta definido. ";//the first second name is not defined
        if($Ape2=="") $this->errores[]="Error(10): El apellido 2 no esta definido. ";//the second second name is not defined
        if($Sexo=="") $this->errores[]="Error(11): El sexo no esta definido. ";//the gender is not defined
        if($Dia==0) $this->errores[]="Error(12): El dia no esta definido. ";//the day is not defined
        if($Mes==0) $this->errores[]="Error(13): El mes no esta definido. ";//the month y not defined
        if($Anio==0) $this->errores[]="Error(14): El a&ntilde;o no esta definido. ";//the year is not defined
        
        $fecha=mktime(0,0,0,$Mes,$Dia,$Anio);if($fecha===false)$this->errores[]="Error(15): la fecha no concuerda. ";
        
        $Nombre=trim(strtoupper($Nombre));if(ereg("^[A-ZÑ{$this->Especiales}][A-Z Ñ{$this->Especiales}]+$",$Nombre)===false) $this->errores[]="Error(16): El nombre tiene caracteres no reconocibles. ";//the name have not valid chars 
        $Ape1=trim(strtoupper($Ape1));if(ereg("^[A-ZÑ{$this->Especiales}][A-Z Ñ{$this->Especiales}]+$",$Ape1)===false) $this->errores[]="Error(17): El apellido tiene caracteres no reconocibles. ";//the first second name have not valid chars 
        $Ape2=trim(strtoupper($Ape2));if(ereg("^[A-ZÑ{$this->Especiales}][A-Z Ñ{$this->Especiales}]+$",$Ape2)===false) $this->errores[]="Error(18): El apellido 2 tiene caracteres no reconocibles. ";//the second second name have no valid chars 
        if(ereg("^[HM]$",$Sexo)===false) $this->errores[]="Error(19): el sexo deve ser H/M siendo H para Hombre. ";
        
        $Dia=date("d",$fecha); $Mes=date("m",$fecha); $Anio=date("Y",$fecha);
        //$Entidad=(int)$Entidad;if($Entidad>=count($this->Entidades)) $this->errores[]="Error(19): La entidad esta fuera del rango permitido. ";// the state is not valid(out of range)
        //$Entidad=$this->Entidades[$Entidad];
        if(count($this->errores)) return false;
        $vocales=array("A","E","I","O","U");
        $consonantes =array("B","C","D","F","G","H","I","J","K","L","M","N","Ñ","P","Q","R","S","T","V","W","X","Y","Z");
        
        $curp=substr($Ape1,0,1);//primera letra
        
        for($i=1;$i<strlen($Ape1);$i++)
            if(array_search(substr($Ape1,$i,1),$vocales)!==false){
                $curp.=substr($Ape1,$i,1);//primera vocal que no sea la primera
                break;
            }
        $curp.=substr($Ape2,0,1).substr($Nombre,0,1).substr($Anio,2,2).$Mes.$Dia.$Sexo.$Entidad;
        for($i=1;$i<strlen($Ape1);$i++)
            if(array_search(substr($Ape1,$i,1),$consonantes)!==false){
                $curp.=substr($Ape1,$i,1);//primera vocal que no sea la primera
                break;
            }
        for($i=1;$i<strlen($Ape2);$i++)
            if(array_search(substr($Ape2,$i,1),$consonantes)!==false){
                $curp.=substr($Ape2,$i,1);//primera vocal que no sea la primera
                break;
            }
        for($i=1;$i<strlen($Nombre);$i++)
            if(array_search(substr($Nombre,$i,1),$consonantes)!==false){
                $curp.=substr($Nombre,$i,1);//primera vocal que no sea la primera
                break;
            }
        $curp.="0";    $curp.=$this->calculaDigito($curp);
        $this->CURP=$curp;//curp pseudocalculada, con la esperanza de que este correcta, ya luego se verificara // we get the curp calculated
        $this->vars=
        "strPrimerApellido=".urlencode("{$Ape1}")."; ".
        "strSegundoAplido=".urlencode("{$Ape2}")."; ".
        "strNombre=".urlencode("{$Nombre}")."; ".
        "sSexoA=".urlencode("{$Sexo}")."; ".
        "strdia=".urlencode("{$Dia}")."; ".
        "strmes=".urlencode("{$Mes}")."; ".
        "stranio=".urlencode("{$Anio}")."; ".
        "sEntidadA=".urlencode("{$Entidad}")."; strTipo=A; entfija=DF; depfija=05 \r\n";
        return true;
    }
    public function SetCURP($xcurp=""){
        $this->url=$this->url0;
        $xcurp=trim(strtoupper($xcurp));
        {
            switch (strlen($xcurp)){
            case 10 :
                $reg = "^([A-Z]{2})([A-Z]{2})([0-9]{2})([0-9]{2})([0-9]{2})$";
                break;
            case 11 :
                $reg = "^([A-Z]{2})([A-Z]{2})([0-9]{2})([0-9]{2})([0-9]{2})([HM])$";
                break;
            case 12 :
                $reg = "^([A-Z]{2})([A-Z]{2})([0-9]{2})([0-9]{2})([0-9]{2})([HM])([A-Z]{1})$";
                break;
            case 13 :
                $reg = "^([A-Z]{2})([A-Z]{2})([0-9]{2})([0-9]{2})([0-9]{2})([HM])([A-Z]{2})$";
                break;
            case 14 :
                $reg = "^([A-Z]{2})([A-Z]{2})([0-9]{2})([0-9]{2})([0-9]{2})([HM])([A-Z]{2})([A-Z]{1})$";
                break;
            case 15 :
                $reg = "^([A-Z]{2})([A-Z]{2})([0-9]{2})([0-9]{2})([0-9]{2})([HM])([A-Z]{2})([A-Z]{2})$";
                break;
            case 16 :
                $reg = "^([A-Z]{2})([A-Z]{2})([0-9]{2})([0-9]{2})([0-9]{2})([HM])([A-Z]{2})([A-Z]{3})$";
                break;
            case 17 :
                $reg = "^([A-Z]{2})([A-Z]{2})([0-9]{2})([0-9]{2})([0-9]{2})([HM])([A-Z]{2})([A-Z]{3})([A-Z0-9]{1})$";
                break;
            case 18:
                $reg = "^([A-Z]{2})([A-Z]{2})([0-9]{2})([0-9]{2})([0-9]{2})([HM])([A-Z]{2})([A-Z]{3})([A-Z0-9]{2})$";
            }
            if(ereg($reg,$xcurp, $regs)===false)$this->errores[]="Error(20): La entidad curp no esta bien estructurada. ";//the state in the curp is not structurated
            if(isset($regs[7]))    if((array_search($regs[7],$this->Entidades))===false)
                $this->errores[]="Error(21): La entidad en la curp no esta dentro del rango permitido. ";//the state is not in the rage 
            
            if(isset($regs[9]))if(((int)$this->calculaDigito($xcurp))!=((int)$regs[9])) $this->errores[]="Error(21): parece que el digito verificador no corresponde con el de la curp. ";//the verific char not correspond
        }
        $this->CURP=$xcurp;
        $this->vars="strCurp=".urlencode("{$xcurp}")."; strTipo=B; entfija=DF; depfija=05"."\r\n";
        if(count($this->errores)) return false;
        return true;
    }
    
    private function calculaDigito($curp){
        $segRaiz      = substr($curp,0,17);
        $chrCaracter  = "0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
        $intFactor    = array();
        $lngSuma      = 0.0;
        $lngDigito    = 0.0;
        for($i=0; $i<17; $i++){
            for($j=0; $j<37; $j++){
                if(substr($segRaiz,$i,1)==substr($chrCaracter,$j,1)){
                    $intFactor[$i]=$j;
                }
            }
        }
        for($k = 0; $k < 17; $k++){
            $lngSuma= $lngSuma + (($intFactor[$k]) * (18 - $k));
        }
        $lngDigito= (10 - ($lngSuma % 10));
        if($lngDigito==10){
            $lngDigito=0;
        }
        return $lngDigito;
    }
    public function LeerDatos(){
        unset($this->errores);
        $this->errores=array();
        /*$host = Host al que se establecerá la conexión.
        $uri = Archivo que se intentará abrir.
        urlencode($vars) = Variables que se enviarán.
        $puerto = Puerto por el que se establecerá la conexión.*/
        if(strlen($this->vars)==0){
            if(strlen($this->CURP)>0) 
                $this->vars =urlencode("txtCurp=".$this->CURP); 
            else{
                $this->errores[]="Error(1): No hay datos que leer. ";
            }
        }
        
        $url=$this->url;
        $url=str_replace("http://","",$url);
        $_GET['host']=substr($url,0,strpos($url,"/"));
        $_GET['uri']=substr($url,strpos($url,"/"));
        if($this->Modo=="POST") 
            $_GET['vars']=$this->vars; 
        else{
            $vars=explode(";",$this->vars);$variables="";$amp="";
            foreach($vars as $Var){
                $variables.=$amp.trim($Var);
                $amp="&";
            }
            $_GET['uri'].="?".$variables;
            unset($_GET['vars']);
        }
        $_GET['puerto']=80;
        /* El siguiente fragmento fue tomado del siguiente autor(se modifico poco por eso hago referencia)
        Autor: Victor De la Rocha Sitio: http://www.mis-algoritmos.com blog: http://vyk1.spaces.live.com */ 
        if(isset($_GET['host'])&&!ereg("^ *$",$_GET['host'])){ 
            $host=$_GET['host']; 
        }else{ 
            $this->errores[]="Error(2): No ha definido el host. ";//the host is not defined
        } 
        if(isset($_GET['uri'])&&!ereg("^ *$",$_GET['uri'])){ 
            $uri=$_GET['uri']; 
        }else{ 
            $this->errores[]="Error(3): No ha definido el uri al cual se enviarán los datos. ";//the uri is not defined
        } 
        if(isset($_GET['vars'])&&!ereg("^ *$",$_GET['vars'])){ 
            $vars=$_GET['vars']; 
        }/*else{ 
            $this->errores[]="Error(4): No ha definido vars. ";
        } */
        if(isset($_GET['puerto'])&&!ereg("^ *$",$_GET['puerto'])){ 
            $puerto=$_GET['puerto']; 
        }else{ 
            $this->errores[]="Error(5): Es necesario definir el puerto por el cual se ejecutará la conexión. ";//the port is not defined
        }
        if(count($this->errores))return false;
        $header = "Host: $host\r\n"; 
        $header .= "User-Agent: PHP Script\r\n"; 
        if($this->Modo=="POST"){
            $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
            $header .= "Content-Length: ".strlen($vars)."\r\n";
        }
        $header .= "Connection: close\r\n\r\n";
        $fp = pfsockopen("tcp://".$host, $puerto, $errno, $errstr, 30); 
        if($fp){
            fputs($fp, $this->Modo." {$uri} HTTP/1.1\r\n");
            fputs($fp, $header.$vars);
            fwrite($fp, $out); 
            //if(isset($_GET[view]))
            {
             $Archivo="";
                while (!feof($fp)) {
                    $Archivo.= fgets($fp, 128);
                }$Archivo.=" ";
            } fclose($fp);
        }else{ 
            $this->errores[]="Error(6):No se pudo establecer la conexion.";return false;//the conection can not be established
        }/*Fin del codigo que se implemento*/
        if(strpos($Archivo,$this->Lectura_Error)){
            $this->errores[]="Error(7):".$this->Lectura_Error;
            return false;
        }else{
            
            $Archivo=strstr($Archivo,'<input');//delimitamos hasta el primer input
            $Archivo=substr($Archivo,0,strpos($Archivo,">",strpos($Archivo,"errores"))+1);//buscamos la ultima etiqueta
            $tags=explode("\n",$Archivo);//separamos por etiquetas por medio de "\n"
            if(count($tags)==0) $tags=explode("\r",$Archivo);//si no paso nada entonces por otro criterio "\r"            
            if(count($tags)==0){
                $tags=explode(">",$Archivo); 
                for($i=0;$i<count($tags);$i++)
                    $tags[$i]=$tags[$i].">";
            }//si no entonces por medio de ">"
            for($i=0;$i<count($tags);$i++){//por cada tag encontrado
                $Nombre=$this->GetTagProp($tags[$i],"name");//buscamos el nombre y
                $Valor=$this->GetTagProp($tags[$i],"value");//el valor
                //$this->GetTagProp($tags[i],"type"); //tambien se puede el tipo
                $this->DatosExtras[$Nombre]=$Valor;//Guardamos en extras, nomas por referencia
                
                if(strtolower($Nombre)=="strcurp"){//curp
                    $this->CURP=$Valor;
                }else
                if(strtolower($Nombre)=="strnombre"){//nombre
                    $this->Nombre=$Valor;
                }else
                if(strpos(strtolower($Nombre),"primerap")!==false){//primer apellido
                    $this->Ape1=$Valor;
                }else
                if(strpos(strtolower($Nombre),"segundo")!==false){//segundo apellido
                    $this->Ape2=$Valor;
                }else
                if(strpos(strtolower($Nombre),"sexo")!==false){//sexo segun genero
                    if(strpos($Valor,"HOM")!==FALSE||strpos($Valor,"MAS")!==FALSE) $this->Sexo="H";else
                    if(strpos($Valor,"MUJ")!==FALSE||strpos($Valor,"FEM")!==FALSE)$this->Sexo="M";
                }else
                if(strpos(strtolower($Nombre),"chanacim")!==false){//fecha de nacimiento
                    list( $this->Dia, $this->Mes, $this->Anio) = split( '[/.-]', $Valor );//el formato es dia mes año
                    //pasamos cada uno a un entero
                    $this->Dia=(int)$this->Dia;    $this->Mes=(int)$this->Mes;    $this->Anio=(int)$this->Anio;
                }
            }
        }
        return true;
    }
    private function GetTagProp($Etiqueta,$Tag){
        $Etiqueta=trim($Etiqueta,"\n\t\r\0\b ");//quitamos caracteres que nos estorvan
        $Campo=substr($Etiqueta,strpos($Etiqueta,'<')+1,strpos($Etiqueta,'>')-1)." ";//quitamos las marcas de etiquetas y agregamos un token separador
        $Valor =trim(substr($Campo,strpos($Campo,'"',strpos($Campo,'=',strpos($Campo,$Tag)))));
        return trim(substr($Valor,0, strpos($Valor,'"',strpos($Valor,'"')+1)+1),"\" ");
    }
    public function GetNumberErrors(){//obtiene un arreglo del numero de cada error sin su descripcion
        foreach($this->errores as $ErrorNumber){
            $ErrorNum[]=substr($ErrorNumber,strpos($ErrorNumber,"("),strpos($ErrorNumber,")"));
        }return $ErrorNum;
    }    
}
?>

<?php

$Curp=new B_CURP();//creamos el objeto de la curp
$Curp->SetDatos("Oswaldo", "Sanchez", "Montana" , "h", 18, 8, 1986, "SL");//se meten datos para que calcule una posible curp
echo $Curp->CURP;

///El ultimo parametro que se envia al metodo SetDatos, es una abreviacion del estado, dentro de la clase, veran
///que dato es el que tienen que enviarle dependiendo del estado.
?>
 
#18
Varias personas me han hecho la solicitud de envio por MP, les pido que sigan leyendo los post enviados y veran que ya están posteadas las clases.

Saludos!!
 

Moonstar

Bovino adicto
#19
Jajajaja Almenos postea donde lo descargaste y dale la gracias al autor osease yo, bueno almenos el transcript del la curp. Busquen en phpclasses alli hay varios scripts especialmente el unico de la curp transcrito desde la pagina oficial, el cual esta hecho en javascript les dejo unos links para que se deleiten de la facilidad de la curp, el RFC se calcula de igual menera solo que la clave de duplicidad es la que alli si no se como obtenerla en el CURP los 2 ultimos son un codigo de duplicidad y el otro como un chequeo tipo crc pero mas basico, en la clase esta como se calcula. bueno sin mas que agregar les dejo los links.
Código:
url del codigo fuente de la clase transcrito por mi de javascript a php
http://www.phpclasses.org/browse/package/4708.html

Codigo javascript de donde tome la base para transcribirlo al php
http://www.gobernacion.gob.mx/CurpPS_HTML/bibliotecaJS/Curp.js
Como ven todo esta por alli en internet, si alguien sabe donde puedo encontrar un portal como
Código:
http://www.gobernacion.gob.mx/CurpPS_HTML/jsp/CurpTDP.html
para obtener datos de un RFC valido como la curp me ayudaria para postear en la pagina ya dada lo mismo que la CURP pero para el RFC el cual como veran en la clase dada una curp valida retorna el nombre apellidos y datos que estan en la pagina.

P:eek: No considero spam y espero que no lo tomen asi, ya que una pagina es del gobierno y la otra es de una fuente cosa que pocos buscan primero alli en vez de preguntar en los foros y crear temas bajo en nombre de "Ayuda" sin poner su duda o comentario.
 
Arriba