Foros del Web » Programando para Internet » PHP »

como generar una id unica

Estas en el tema de como generar una id unica en el foro de PHP en Foros del Web. pues eso, necesito generar una id unica y alfanumerica que no tenga mas de 15 digitos, como las que usan muchas paginas web, por ejemplo ...
  #1 (permalink)  
Antiguo 28/12/2006, 07:29
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
como generar una id unica

pues eso, necesito generar una id unica y alfanumerica que no tenga mas de 15 digitos, como las que usan muchas paginas web, por ejemplo como youtube para la id de los videos, pero no tengo ni idea de como hacerlo y que sea unica para que no de problemas de duplicado al insertar en la bd. me puede alguien orientar?

un saludo
  #2 (permalink)  
Antiguo 28/12/2006, 08:07
 
Fecha de Ingreso: septiembre-2004
Ubicación: Santiago de Chile
Mensajes: 156
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: como generar una id unica

Hola estimado. jejej que bueno me hiciste pensar un rato en como hacer eso...
bueno, te dejo la solucion a tu problema

Saludos
Código PHP:
<?
$letra
[1] = 'a';
$letra[2] = 'b';
$letra[3] = 'c';
$letra[4] = 'd';
$letra[5] = 'e';
$letra[6] = 'f';
$letra[7] = 'g';
$letra[8] = 'h';
$letra[9] = 'i';
$letra[10] = 'j';
$letra[11] = 'k';
$letra[12] = 'l';
$letra[13] = 'm';
$letra[14] = 'n';
$letra[15] = 'o';
$letra[16] = 'p';
$letra[17] = 'q';
$letra[18] = 'r';
$letra[19] = 's';
$letra[20] = 't';
$letra[21] = 'u';
$letra[22] = 'v';
$letra[23] = 'w';
$letra[24] = 'x';
$letra[25] = 'y';
$letra[26] = 'z';

for(
$i=0;$i<=14;$i++){
$letra_o_numero rand(1,2);
//si es 1, que el string sea una letra
    
if ($letra_o_numero == 1){
        
$string $string.$letra[rand(1,26)];

    }else{
    
// si es 2, que escriba un numero
    
$var_numero rand(0,9);
    
$string $string.(string)$var_numero;
    }
}
// el String quedara de largo 15
echo $string;
?>

Última edición por guiweb; 28/12/2006 a las 08:20
  #3 (permalink)  
Antiguo 28/12/2006, 08:22
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: como generar una id unica

Youtube al parecer usa un método de encriptación sobre algún valor numérico, no digo que así sea, pero parece que es un id común de la db pasado por base64.
Hay muchas maneras de "encriptar" códigos logrando que tengan este aspecto al usuario y son métodos de ida y vuelta, yo tenia una muy buena (tendría que revisar los backups) donde siempre el valor generado era diferente...si tengo tiempo y lo recuerdo veré de buscarla.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 29/12/2006, 03:30
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
Re: como generar una id unica

gracias por vuestras respuestas

nicolaspar a ver si pones ese codigo me interesa muxo esa forma de generar id al estilo de youtube y otras, te lo agradecere de por vida XD pq llevo bastante detras de esto, pero no encuentro nada
  #5 (permalink)  
Antiguo 29/12/2006, 04:05
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Re: como generar una id unica

Cita:
Iniciado por finikini Ver Mensaje
...
generar una id unica y alfanumerica que no tenga mas de 15 digitos, ...
Podrias usar este arreglo para generar una id Alfa-Numerica de 15 caracteres.
Código PHP:
$k strtolower(substr(md5(mt_rand()), 015)); 
Luego podrias hacer que primero verifiques la existencia de id en la base de datos y si no existe haces el INTO.. osea agregas el ID.

Creo que de esa forma estaria solucionando el problema.-

Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #6 (permalink)  
Antiguo 29/12/2006, 07:37
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: como generar una id unica

Un ejemplo de lo que te decia del base64
Código PHP:
echo base64_encode("1") ."<hr>";
echo 
base64_decode("MQ=="); 
Y si queres implementarle un hash podrías hacer:
Código PHP:
$hash "algomas"#Que siempre arranque con una letra así intval hace lo suyo
echo base64_encode("1".$hash) ."<hr>";
echo 
intval(base64_decode("MWFsZ29tYXM=")); 

Ahora, cual es el cometido de esto? Solo darle una apariencia distinta a la url imagino, no? porque de ser cualquier otro su uso no le veo ningún beneficio.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #7 (permalink)  
Antiguo 29/12/2006, 11:26
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
Re: como generar una id unica

pues lo que yo andaba buscando es evitar que recorran la base de datos de manera automatica, por eso buscaba como generar una id alfanumerica en vez de numerica para cada registro de la tabla pero que no me presentara problemas de id duplicadas a la hora de insertarlos, ademas que no me gustan las id numericas XD pq cuando se borran algun registro quedan huecos.

muxisimas gracias me has enseñado la luz jejejeje
  #8 (permalink)  
Antiguo 29/12/2006, 11:43
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: como generar una id unica

Para que no te "recorran la base de datos de manera automática" no es necesario esto, podes usar otros métodos mas seguros.

Y con el tema del borrado, lo ideal es nunca borrar de manera física sino hacerlo de manera lógica. De toda forma si borras lógicamente el id 8 no lo podrás reutilizar, cosa que me parece correcta ya que pertenece a un registro, y que con cualquier tipo de PK que implementes se dará el caso.

Imaginate este caso según lo que pretendes:
Tengo un vídeo en youtube id=1. Es el vídeo de Rodolfo el cual borro y al dar de alta el vídeo de Madonna este último tomara su lugar para que no queden "huecos".
Quienes entren a ver el vídeo de rodolfo porque ya tenían el link, en vez de ver un mensaje de "Vídeo borrado" verán el vídeo de madonna...no tiene ningún sentido común usarlo así...o es otro tu caso?
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 29/12/2006, 12:04
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
Re: como generar una id unica

hombre si lo pones asi tienes todas la razon del mundo, pero una id numerica tiene siempre un limite aunque sea un campo bigint y te cueste la vida llegar hasta el ultimo id jeje si yo creo una id alfanumerica como tu has dicho con base64_encode basada en una fecha time() y el nick del usuario que es unico, ya no hay huecos de numeros, ni se puede recorre la BD y tampoco se podran reemplazar por otra en el caso de que se borre un registro mas adelante o eso creo.

¿cuales son esos metodos? me interesan mucho esas cosas
  #10 (permalink)  
Antiguo 29/12/2006, 14:20
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: como generar una id unica

Uno muy efectivo es enviar un segundo parámetro que no es menos que el ID + un hash pasados por md5 (que no tiene vuelta).
Como el hash lo tenes vos, cuando levantas el ID lo comparas con esta segunda variable, concatenandola con el hash y pasándolo por md5. Ej:
Config:
$hash = "algo28762_{%";

Pagina 1:
Código PHP:
<a href="...?id=<?=$rs["id"];?>&i=<?=md5($rs["id"].$hash);?>">Detalle</a>
En este punto, te pueden escribir el id pero no que coincida con un i valido.

Pagina 2, al inicio:
Código PHP:
if( $_GET["i"] != md5($_GET["id"].$hash) ){
  echo 
"quieren hacer trampita??"; exit;

O simplemente pasar solo i, y cuando hagas la consulta haces usas md5 desde mysql, en vez de where id='$id' haces esto:
Código PHP:
$r mysql_query("Select * from tabla where MD5(concat(id,'".$hash."')) = '$i'"); 
Y sigo diciéndote, usar int, bigint, o lo que fuere es lo mejor, para eso estan hecho, y con estas formas podes lograr lo que estas buscando sin complicarte casi nada.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #11 (permalink)  
Antiguo 06/01/2007, 19:27
 
Fecha de Ingreso: mayo-2005
Ubicación: Patzcuaro
Mensajes: 106
Antigüedad: 18 años, 11 meses
Puntos: 2
Re: como generar una id unica

Cita:
Iniciado por nicolaspar Ver Mensaje
Uno muy efectivo es enviar un segundo parámetro que no es menos que el ID + un hash pasados por md5 (que no tiene vuelta).
Como el hash lo tenes vos, cuando levantas el ID lo comparas con esta segunda variable, concatenandola con el hash y pasándolo por md5. Ej:
Config:
$hash = "algo28762_{%";

Pagina 1:
Código PHP:
<a href="...?id=<?=$rs["id"];?>&i=<?=md5($rs["id"].$hash);?>">Detalle</a>
En este punto, te pueden escribir el id pero no que coincida con un i valido.

Pagina 2, al inicio:
Código PHP:
if( $_GET["i"] != md5($_GET["id"].$hash) ){
  echo 
"quieren hacer trampita??"; exit;

O simplemente pasar solo i, y cuando hagas la consulta haces usas md5 desde mysql, en vez de where id='$id' haces esto:
Código PHP:
$r mysql_query("Select * from tabla where MD5(concat(id,'".$hash."')) = '$i'"); 
Y sigo diciéndote, usar int, bigint, o lo que fuere es lo mejor, para eso estan hecho, y con estas formas podes lograr lo que estas buscando sin complicarte casi nada.
Yo tengo una tabla donde tengo un id numérico, y también guardo un determinado titulo.

Creo que si uno los dos campos obtengo el mismo resultado. por lo que en la url podrías poner.

/123/Titulo de algo

Asi evitas que te recorran la bd, ya que necesariamente se ocupan dos valores de la bd para mostrar la pagina.
__________________
_
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 04:50.