Creando IDs únicos en PHP.

Generalmente cuando almacenamos datos en una base de datos, nos despreocupamos por generar un ID (identificador de registro) único, ya que delegamos la tarea al motor de la base de datos, asignando generalmente la propiedad de auto_increment, lo que nos garantiza que se cree un valor único por cada registro nuevo que insertamos. Esto nos puede acarrear inconvenientes al momento de migrar o unir datos en una tabla, a continuación, una solución posible.

«Auto_increment» puede resultar bastante incómodo si queremos  unificar  por ejemplo una misma tabla que se encuentra en dos bases de datos diferentes. Ya que en ambas tablas nos podemos encontrar con registros que tengan los mismos ID. Si hemos previsto que un futuro podamos encontrarnos con esta situación, la solución consiste en generar por nuestra cuenta los ID de identificación de los campos.

En PHP se puede utilizar la siguiente función:

uniqid( [string prefijo [, bool mas_entropia]] );

Esta función devuelve un identificador único con prefijo, basado en la hora actual en microsegundos. El parámetro prefijo se hizo opcional en PHP 5 pero puede resultar útil, por ejemplo, si se generan identificadores simultáneamente en varias máquinas que pueden estar generando el identificador en el mismo microsegundo. Por ejemplo se le puede asignar como cadena la dirección IP de la pc, nombre de equipo, o un texto que  diferencie una pc de otra.

Si el parámetro opcional mas_entropia es TRUE, uniqid() agregará entropía adicional (usando el generador de congruencia lineal combinado) al final del valor de retorno, lo cual puede hacer más únicos los resultados.

Con un prefijo vacío, la cadena devuelta tendrá una longitud de 13 caracteres. Si mas_entropia es TRUE, tendrá 23 caracteres.

Entonces finalmente al momento de hacer el «INSERT» incluimos este valor como identificador del registro. De esta forma en un futuro podremos unir dos tablas con la misma estructura sin problemas de tener identificadores repetidos.

Ejemplo:

Obviamente, no se debe asignar ningún campo como “auto_increment” en la base de datos.
En fin, espero que sea de utilidad.
Saludos.

3 comentarios sobre “Creando IDs únicos en PHP.

  1. pablo

    hola. me parece muy interesante el articulo. tengo algunas dudas, por ejemplo: como me aseguro que el string que generado no se repetirá en el futuro ¿toma en cuenta el año dia, hora o solo el microsegundo?
    Ademas como podría hacer que entregue un string de menos de 13 caracteres, por ejemplo 6.

    gracias.

  2. Gerónimo

    Hola pablo! Bien te comento que esa función toma como parámetros además de los microsegundos y el prefijo que le puedas asignar, un identificador del servidor, el tiempo en formato Unix, la ip del cliente y un valor generado aleatoriamente, así que sería muy difícil que en el futuro puedan generarse valores repetidos. Por otro lado no existe la posibilidad de que esta función te retorne una cadena menor a 13 caracteres.
    Saludos!

  3. pablo

    hola. gracias por contestar. al parecer la funcion es bastante buena. lamentablemente, como dijiste, no se puede generar un substring de menos de 13 caracteres, que era justo lo que necesitaba, ya que estoy generando codigos para que ciertos usuarios los ingresen, y un codigo de 13 caracteres es demasiado. probaré generando string aleatorios y consultando a la base de datos si ya se han creado anteriormente.
    gracias!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *