Foros del Web » Programando para Internet » PHP »

Function Pass Rand Num & Letras usando GD

Estas en el tema de Function Pass Rand Num & Letras usando GD en el foro de PHP en Foros del Web. hola, acavo de terminar esta funcion, lo que hace es generar un pass, con letras y numeros aleatorios, una emulacion de lo que hace el ...
  #1 (permalink)  
Antiguo 17/10/2003, 16:15
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 7 meses
Puntos: 2
Function Pass Rand Num & Letras usando GD

hola, acavo de terminar esta funcion, lo que hace es generar un pass, con letras y numeros aleatorios, una emulacion de lo que hace el nuke .

a ver, funcionar funciona, el problema esq aparte de sacar la imagen con los datos en GD, quiero sacar el valor de la variable, para luego trabajar con ella, y juas,,, la sorpresa... puedo meter variables hacia la funcion,,, pero no se sacar datos de esa funcion atraves del nombre de la funcion... no se si me explico., veamos el code.

Código PHP:
<?
Header
("Content-type: image/png");

function 
FUNC_codeReg($longCodeLetras){

    for (
$iSuma=1$iSuma<=$longCodeLetras$iSuma++)    {

        
$letraCode chr(rand(97,122));
          
$generaCodeLetras .= strtoupper($letraCode);

        
$numCode rand(0,9);
        
$generaCodeNum .= $numCode;

        
$montaCode $generaCodeLetras.$generaCodeNum;

    }

        
$ancho 100;
        
$alto 40;
        
$imgCreate imagecreate($ancho,$alto);

        
$colorBlanco imagecolorallocate($imgCreate,255,255,255);
        
$colorNegro imagecolorallocate($imgCreate,0,0,0);
        
$colorRojo imagecolorallocate($imgCreate,255,0,0);

    
imagestring($imgCreate,2,2.2,4,"CODIGO DE ACCESO",$colorNegro);
    
imagestring($imgCreate,4,$ancho/5.5,$alto-20,$montaCode,$colorRojo);
    
imagepng($imgCreate);
    
imagedestroy($imgCreate);

}

FUNC_codeReg($longCodeLetras=4);


?>
asi como esta me muestra la imagen en GD con el pass..., ahora bien, como saco el valor $montaCode, que es el que lleva el pass, sin sacar la imagen GD, añadi esa variable a la funcion, pero nada, se empeña en mostrar la imagen..., acaso debo meter otra funcion dentro de esta, y q esta 2º sea la que genere el GD...?
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 17/10/2003 a las 16:53
  #2 (permalink)  
Antiguo 17/10/2003, 16:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
mm bueno .. no he visto tu problema concreto ahora mismo, pero .. jeje hice una funcioncita igual para el mismo cometído:

genera_password.php
Código PHP:
<?php
/*
Función: Genera passwords aleatorios (numéricos o alfanuméricos).
Entrada: Logintud: (digitos/caracteres a generar), tipo: [numerio|alfanumerico]
Salida: Devuelve string.
*/

function genera_password($longitud,$tipo="alfanumerico"){

    if (
$tipo=="alfanumerico"){
        
$exp_reg="[^A-Z0-9]";
    } elseif (
$tipo=="numerico"){
        
$exp_reg="[^0-9]";
    }

    return 
substr(eregi_replace($exp_reg""md5(time())) .
       
eregi_replace($exp_reg""md5(time())) .
       
eregi_replace($exp_reg""md5(time())),
       
0$longitud);
}


// Configuración.

// Nombres tipografías a usar (sin extensión .ttf)
$tipografias = array("arial","comic","times");

// Directorio donde estén las fuentes .. (ruta absoluta)
// (importante el último /o \ según corresponda.
// (Las fuentes son True Type (.ttf)
$tipografias_ruta "C:\WINDOWS\FONTS\\"// Windows.
// $tipografias_ruta="/home/sito/public_html/fonts/"; // Linux (*NIX)

// Inicializa eje X desde donde se empezará a
// "dibujar" el código. (referente al tamaño de la "caja")
$espacio 0;

// Tamaño fuente.
$tamano_fuente 15;

// Profundidad caracteres/digitos del código a generar (password).
$profundidad_codigo 8// (alfanuméricos)


// Rutina ...

    // Generamos un código (password) aleatorio.
    
$codigo=genera_password($profundidad_codigo);

    
// Cálculo Ancho automático de la "caja"
    
    
$x=$profundidad_codigo*$tamano_fuente;
    
$y=$tamano_fuente;

    
// Iniciar la generación de la imagen. Se define una "caja" de $x por $y pixels.
    
$im imagecreate ($x$y);
    
    
// Definición Colores. Expresados en valores R G B (respectivamente).
    
$color_fondo imagecolorallocate ($im255255255); // Blanco
    
$color_texto imagecolorallocate ($im000); // Negro

    
for ($caracter=0$caracter<=$profundidad_codigo$caracter++){

        
// Seleccion de una tipografía aleatoria.
        
$indice_aleatorio=array_rand($tipografias);
        
$tipografia=$tipografias_ruta.$tipografias[$indice_aleatorio].".ttf";
    
        
// Generar el caracter gráfico.
        
ImageTTFText ($im$tamano_fuente0$espacio$tamano_fuente$color_texto$tipografia $codigo{$caracter});

        
// Separación entre caracteres
        
$espacio +=$tamano_fuente;
    }

    
// Cabecera HTTP. Indica al navegador que la imagen que estamos generando es .PNG
    
header("Content-type: image/png");
    
    
// Generar Imagen (un .png Dinámico.)
    
imagepng ($im);
    
// Destruir imagen (de memoria .. va a ser enviada directamente al navegador).
    
imagedestroy ($im);
?>
Y su forma de uso .. ejemplo:

demo.html
Código:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
       <title>Title here!</title>
</head>
<body>
El password:
<img src="genera_password.php">
</body>
</html>
Cada vez que se llame a "genera_password.php" se genera una nueva contraseña .. Si recargas página lo puedes comprobar.

Uso la función de generar password aleatorio alfanumérico (o numérico) que está en las FAQ's del foro (y que dejé yo mismo por allá también xD) ..

La función usa várias tipografías (fuentes .ttf) para generar cada uno de los caracteres/numeros que forman el password .. así se hace más dificil el tema xDDD..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 17/10/2003, 16:38
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 7 meses
Puntos: 2
usas expresiones regulares.... cuanto me queda por aprender... xxxxxxxddddddddd

jajajajaj, siempre a toooopeeee !!!!


aun asi, me gustaria saber como saco ese valor en modo texto normal y corriente sin tener que ver la imagen GD.
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 17/10/2003 a las 16:55
  #4 (permalink)  
Antiguo 17/10/2003, 17:30
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 10 meses
Puntos: 5
Bueno, para eso debes entender como es que se genera la imagen y como se muestra...

La funcion misma te da la salida de la imagen, por lo que deberías usarla así...

Este codigo lo guardas en un archivo tal.php

Y muestras la imagen en html con un:
<img src="tal.php">

Lo que yo te recomiendo es que primero muevas el header y lo pongas justo antes de que la imagen se genere...

...
Header("Content-type: image/png");
imagepng($imgCreate);
imagedestroy($imgCreate);
?>

De esta manera te da oportunidad de entregar el contenido de la variable, digamos a una variable de sesión, antes de enviar la imagen al navegador:

$montaCode = $generaCodeLetras.$generaCodeNum;
session_start();
$_SESSION["montacode"]=$montaCode;


Esa es una forma en la que podrías tener acceso a el valor de esa variable.


__________________
Manoloweb
  #5 (permalink)  
Antiguo 17/10/2003, 17:34
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 7 meses
Puntos: 2
ok, es verdad...!!!, juas, juas, gracias Manolo !!!

aun asi,,, no hay forma de pasar ese valor por la funcion..., es curioso, osea que en las funciones yo puedo meter valores desde afuera, pero a la hora de sacar esos datos, lo tengo que hacer desde la funcion, osea que la funcion es la que genera la salida no la llamada... umm pues eso no me termina de convencer en las funciones... quizas es pq soy novato aun y no se hacer mas que lo que veis...
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 17/10/2003 a las 17:37
  #6 (permalink)  
Antiguo 17/10/2003, 17:44
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 10 meses
Puntos: 5
Bueno, eso no pasa con las funciones, pasa con ESTA funcion, porque la misma función genera la salida de los encabezados y el contenido.

Las funciones normalmente reciben datos, los procesan y (si lo indicas) los devuelven.

Revisa tus MP, te acabo de enviar un mensaje.


Saludos!
__________________
Manoloweb
  #7 (permalink)  
Antiguo 17/10/2003, 18:25
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 7 meses
Puntos: 2
bueno, al final lo consegui, pero no se si de la forma mas comoda... ....

Código PHP:

<?
function FUNC_codeReg($longCodeLetras){

    for (
$iSuma=1$iSuma<=$longCodeLetras$iSuma++)    {

        
$letraCode chr(rand(97,122));
          
$generaCodeLetras .= strtoupper($letraCode);

        
$numCode rand(0,9);
        
$generaCodeNum .= $numCode;

    }

        
$montaCode $generaCodeLetras.$generaCodeNum;

    return 
$montaCode;

}

$valorGeneraImg FUNC_codeReg($longCodeLetras=4,$montaCode); //esta es la variable que lleva el code

function FUNC_generaImg($valorGeneraImg){

    
$ancho 100;
    
$alto 40;
    
$imgCreate imagecreate($ancho,$alto);

    
$colorBlanco imagecolorallocate($imgCreate,255,255,255);
    
$colorNegro imagecolorallocate($imgCreate,0,0,0);
    
$colorRojo imagecolorallocate($imgCreate,255,0,0);

    
Header("Content-type: image/png");
    
imagestring($imgCreate,2,2.2,4,"CODIGO DE ACCESO",$colorNegro);
    
imagestring($imgCreate,4,$ancho/5.5,$alto-20,$valorGeneraImg,$colorRojo);
    
imagepng($imgCreate);
    
imagedestroy($imgCreate);

}

//FUNC_generaImg($valorGeneraImg); //desactiva esta linea y veras el code en GD,

echo $valorGeneraImg//muestro el valor del code


?>
Manolo, gracias por la explicacion, me he enterao bien, ya se que me has digo que genere la imagen en otro fichero, lo he probado tb, pero la necesito de esta manera demomento., asi me muestra el code, y por debajo llevo la variable a donde quiera. Gracias
__________________
3w.valenciadjs.com
3w.laislatv.com
  #8 (permalink)  
Antiguo 08/02/2005, 15:33
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 21 años, 2 meses
Puntos: 1
Hola, estoy un poco desesperado ya, puse otro post por ahí pero no he obtenido respuesta, primero aclararé algunas cosillas:

*Uso un sistema de "web modular", plantillas y le meto contenido, en estas plantillas, cabeceras comunes a todo el contenido o secciones es donde inicio las sesiones. Lo típico, no?.
Bien, pues estoy intentando generar una imagen de codigo y no hay manera, he probado de mil formas, a través de funciones, directamente en el script de la imagen... y nada.
Es decir, el script que hace de imagen, donde se genera, ese script puede iniciar sesiones y todo lo relativo a un script php, updates db, etc... aunque se le llame como a una imagen, no?:
<img src="imagen.php" />
Pues no sé porqué no me inicia una sesión o almenos no me coge una variable de sesión ya establecida.
Umm, otra cosa: si ese script se "incluye"(como imagen) dentro de un script (evidentemente) donde ya se ha iniciado la sesión.... no debería hacer falta iniciarla en ese mismo script, no? Esto no lo tengo claro, pues al ser un script independiente del sistema: se le llama solo como imagen, no sé si actuará como una pura imagen o procesará el código que lleva:
Pese a ser una imagen, sí que sé que hace updates, etc, por eso no me explico porqué coj**** no coge una variable de sesion grgrgrgrrrr.

Bueno, pongo el código que siempre será lo mejor:

SCRIPT QUE GENERA LA IMAGEN (imagen.php):
Código PHP:
<?php
// Intentamos pasar la variable del codigo:
session_start();
$codigo $_SESSION['imagecode'];

// Creamos la imagen:
//$ancho = 84;
//$alto = 20;
 //$im = imagecreate($ancho,$alto);

//  o la llamamos
$im imagecreatefromPng("fondo_img.png"); 


// Colores
$blanco imagecolorallocate($im,255,255,255);
$negro imagecolorallocate($im,0,0,0);
$gris imagecolorallocate($im,204,204,204);

// La dibujamos:
imagefill($im,0,0,$gris);

// Metemos Texto
imagestring($im,2,5,0,$codigo,$negro);

header("Content-type: image/png");
// Mostramos la imagen 
imagepng($im);
// Liberamos recursos
imagedestroy($im);
?>
Y este donde quiero mostrar esa imagen y/o acceder al valor del código de seguridad, o pasarselo a la imagen, que es lo que hago yo:

Código PHP:
   <?php $_SESSION['imagecode'] = random_num();?>
Código HTML:
<p>
C&oacute;digo de Seguridad: 
<img src="imagen.php" alt="C&oacute;digo de Seguridad" />
</p> 
En fin, bueno me va a dar algo ya, he probado con todo.
Aclarar que las sesiones se inician perfectamente y tal y que no me arroja ningún error, salvo el de la imagen que no la puede generar pues no le llega el valor de sesión.
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 08/02/2005 a las 15:43
  #9 (permalink)  
Antiguo 10/04/2005, 04:23
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 21 años, 5 meses
Puntos: 0
A todo esto... creo que tengo correctamente instalada la librería gd pero he ejecutado el código que dejó cluster y solo veo un texto que pone 'El password:' y nada más...

que falla?

Saludos
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)

Última edición por DjNelson; 15/05/2005 a las 12:02
  #10 (permalink)  
Antiguo 16/05/2005, 10:07
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 21 años, 5 meses
Puntos: 0
Ok, ya me funciona pero ahora como recojo el valor generado por la función genera_password() en la página principal (pass.htm), es decir, como se trabaja con:

session_start();
$_SESSION["codigo"]=$codigo;

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #11 (permalink)  
Antiguo 16/05/2005, 11:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Tienes el ejemplo completo de uso del sistema propuesto aquí en esta FAQ:

http://www.forosdelweb.com/showpost....&postcount=123

De todas formas .. si ya creastes tu variable de sesión así .. tan sólo donde la requieras:

Código PHP:
<?
session_start
();
echo 
$_SESSION['codigo'];
?>
Un saludo,
  #12 (permalink)  
Antiguo 16/05/2005, 12:22
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 21 años, 5 meses
Puntos: 0
Gracias a todos, por fin está solucionado.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)

Última edición por DjNelson; 16/05/2005 a las 12:53
  #13 (permalink)  
Antiguo 16/05/2005, 15:30
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 21 años, 5 meses
Puntos: 0
Vaya, he subido el script al servidor (que usan red hat) y no va...

Modifiqué el script así:

// (Las fuentes son True Type (.ttf)
if (PHP_OS=="WINNT") $tipografias_ruta = "C:\WINDOWS\Fonts\\"; // Windows.
else $tipografias_ruta="/home/sito/public_html/fonts/"; // Linux (*NIX)

En mi windows xp va bien pero en el server no muestra la imagen :(

Aquí os dejo el info.php del servidor, he mirado pero no pone nada acerca de la ruta dónde guardan las fuentes... (será eso?)

http://djnelson.webcindario.com/info.php

Haber si alguien me echa una mano.

Saludos.

Ultima edición:

He probado a subir las fuentes al alojamiento web pero tampoco funciona, quizás sea de otra cosa...
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)

Última edición por DjNelson; 16/05/2005 a las 15:54
  #14 (permalink)  
Antiguo 17/05/2005, 07:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Las fuentes debes subirlas si o si a tu servicio de hosting (servidor) .. y en esa variable: $tipografia_rutas debes indicar la ruta absoluta donde quedaron tus fuentes .. puede que no sea (y de hecho no lo será) la del ejemplo .. revisalo.

También debes corroborar que tus librerías GD tal cual las tienes instaladas en tu servidor tenga soporte para fuentes True Type. Eso lo puedes ver en el bloque de información que devuelve sobre GD haciendo un phpinfo()

Primero prueba con la ruta "fija" (absoluta) del servidor que hagas las pruebas .. luego revisa si esa constante PHP_OS devuelve el dato esperado.

PD: según tu phpinfo() de "webcindario" ahí no tienes soporte GD .. tendrás que probarlo en otro sitio.

Un saludo,
  #15 (permalink)  
Antiguo 18/05/2005, 10:11
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 21 años, 5 meses
Puntos: 0
Pues no me había fijado... je,je...

Gracias Cluster.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #16 (permalink)  
Antiguo 09/02/2007, 09:06
Avatar de alvgutierr  
Fecha de Ingreso: mayo-2006
Ubicación: Santiago Chile
Mensajes: 42
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Function Pass Rand Num & Letras usando GD

A todo esto consulta
como puedo guardar esa imagen que genera el script a una carpeta temporal
  #17 (permalink)  
Antiguo 14/02/2007, 07:19
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 21 años, 2 meses
Puntos: 1
Re: Function Pass Rand Num & Letras usando GD

No la vuelques a la pantalla, crea un archivo fopen(); y guardalo en un directorio temporal ^^
O genera un archivo temporal tempfile();
O generas un archivo temporal en el directorio temporal del sistema:
tempnam();
...hay algunas posibles combinaciones.

Te digo, si a la función:
image"extension"(); le añades el directorio lo que hará será copiarla allí, sino es temporal necesita permisos de escritura.

S! :)
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 14/02/2007 a las 07:24 Razón: link
  #18 (permalink)  
Antiguo 14/02/2007, 07:30
Avatar de dopon  
Fecha de Ingreso: julio-2005
Ubicación: Cucuta / Colombia
Mensajes: 493
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Function Pass Rand Num & Letras usando GD

es ams facil asi :

tu tienes
imagepng($imgCreate);

simplemente añade un parametro
Código PHP:
imagepng($imgCreate,$rutadondepondraslaimagen); 
//p ej imagepng($imgCreate,"imagenes/codigo3.png"); 
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:55.