Foros del Web » Programando para Internet » PHP »

generar ID unica

Estas en el tema de generar ID unica en el foro de PHP en Foros del Web. necesito generar una ID unica para cada registro de la tabla, pero no una ID numerica, sino, alfanumerica. He visto muchas paginas que lo hacen ...
  #1 (permalink)  
Antiguo 16/10/2006, 07:19
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
generar ID unica

necesito generar una ID unica para cada registro de la tabla, pero no una ID numerica, sino, alfanumerica. He visto muchas paginas que lo hacen al llamar a los registros al estilo:

http://www.xxxxxxx.com/index.php?id=CXQO9ypnou0

No tengo ni idea de como la generan, se que podria usar MD5 para generar una ID pero es muy larga y muy fea, no me gusta. Esa es mas cortita y mas molona XD ¿me puede aclarar alguien como se consigue?
  #2 (permalink)  
Antiguo 16/10/2006, 07:28
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Por ahí vi un script que hace eso mismo, cuya función es cifrar esa ID y luego descifrarla a base de reemplazar unas letras/numeros por otros/as.

Si lo veo te aviso
  #3 (permalink)  
Antiguo 16/10/2006, 07:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
¿Será que lo que has visto es el SID propagado en el URL de una sesión?

www.php.net/session

Ese dato suele ser PHPSESSID=897a8sdf7897as8d9f7897 (lo que vá antes del = sería el nombre de la sesión .. puede ser ese: por defecto o cualquier otro .. incluso un "id" como nombre).

Podrías dar algún ejemplo de un URL real?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 16/10/2006, 08:01
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
que conste que no quiero hacer spam XD

por ejemplo youtube:

http://www.youtube.com/watch?v=4G1aix8FKMI

y asi hay muchas otras paginas que usan ese tipo de ID, hace bastante que ando buscando como generar eso, pq asi se puede evitar que por ejemplo un bot recorra todos los registros de una tabla, pero no logro encontrar informacion, quizas sea un tipo de hash...
  #5 (permalink)  
Antiguo 16/10/2006, 08:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. ese tipo de referencias para tus registros en forma aleatoria la puedes conseguir de muchas formas.

Te podría servir esta pequeña función:
http://www.forosdelweb.com/showthrea...483#post411483

Sólo debes generarla a la hora de crear tus registros (y almacenarla) y luego usarla como referencia a los mismos.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 16/10/2006, 08:28
 
Fecha de Ingreso: abril-2005
Mensajes: 100
Antigüedad: 19 años
Puntos: 0
te refieres a la funcion de generar una pass alfanumerica??? mmm me daria problemas a la hora de insertar registros, contra mas registros, mas posibilidades de coincidencia y si compruebo si la ID esta disponible, hasta se podrian generar bucles muy largos saturando el servidor... :S
  #7 (permalink)  
Antiguo 16/10/2006, 08:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Tambien puedes probar funciones como uniqid() y usar algoritmos como substr para poder extraer partes de la cadena, saludos!
  #8 (permalink)  
Antiguo 16/10/2006, 09:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por finikini Ver Mensaje
te refieres a la funcion de generar una pass alfanumerica??? mmm me daria problemas a la hora de insertar registros, contra mas registros, mas posibilidades de coincidencia y si compruebo si la ID esta disponible, hasta se podrian generar bucles muy largos saturando el servidor... :S
Bueno .. el algorítmo que usa en base a "microtime()" + MD5 realmente es bastante aleatorio .. ahora .. por seguridad siempre -antes- de instertar un registro bajo ese "código" .. verifica que no exista y si existe .. generas otro.

Cita:
mas posibilidades de coincidencia y si compruebo si la ID esta disponible, hasta se podrian generar bucles muy largos saturando el servidor... :S
Todo es posible . .pero si ya es poco probable que se "repita" .. menos será que en un mismo instante lo haga várias veces atendiendo a que usa microtime() .. sería mucha coincidencia.

Te recomiendo evaluar el algorítmo propuesto metiendo en un gran bucle la llamada a la función y estudia cual es su porcentaje de repeticiones si los hay.

En cualquier caso .. si ese algoritmo no te sirve .. es cosa de que te crees otro. PHP también te pone a tu disposición sus própios algorítmos como el que mencionó GatorV.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 16/10/2006, 09:45
 
Fecha de Ingreso: octubre-2006
Ubicación: Málaga
Mensajes: 33
Antigüedad: 17 años, 6 meses
Puntos: 0
yo utilizo lo siguiente:
Código:
function genera_id($len){
	$clave="";
	$longitud = $len;
	for ($i=1; $i<=$longitud; $i++)
	{
		$tmp = rand(1,3);
		switch ($tmp) {
			case 1:
				$letra = chr(rand(48,57));
				break;
			case 2:
				$letra = chr(rand(65,90));
				break;
			case 3:
				$letra = chr(rand(97,122));
				break;
		}
		$clave .= $letra;
	}
	return $clave;
  }
le pasas con parámetro la longitud de la ID que quieres que te genere. Estará formada por letras mayúsculas, minúsculas y números.
Es importante que antes de insertar en la BD compruebes que no existe por si acaso.
Además MYSQL por defecto no distingue entre mayúsculas y minúsculas por lo que si quieres que así sea debes declarar el campo ID de la tabla como BYNARY.
Espero que sea de ayuda.

Un saludo,
Alejandro
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 02:24.