Hola, estoy implementando un TPV Virtual. Mi problema viene con el código de venta, que se lo tengo que enviar al TPV. El problema me viene cuando tengo dos tablas e incluso cuando tengo dos bases de datos para el mismo TPV (una web en español y otra en ingles). Como código le mandaba el id
de la tabla de venta, pero el problema es que debe ser único en el TPV y claro, al ser dos tablas distintas y dos base de datos distintas (sin acceso la una a la otra web) pues se repiten los id
. Había pensado meter al código que le envío unas claves del tipo GFcodigoES
, GFcodigoEN
, donde:
GF
es el tipo de productocodigo
id de la ventaES
idioma
Pero el TPV no acepta texto en el código. Otra opción que he pensado a sido el meter un numero al código para según el tipo, pero claro al final otro tipo acabará alcanzando a otro.
¿Se os ocurre alguna forma?
Respuestas
En el caso de sistemas distribuidos sin posibilidad de comunicación entre sí, la solución sencilla que se suele aplicar para generar ID únicos consiste en concatenar los siguientes valores:
- Una primera parte que dependa de la hora (por ejemplo el timestamp)
- Una segunda parte que dependa de la máquina en la que se genera el ID.
- Una tercera parte formada por un número aleatorio para evitar problemas al generar varios ID al mismo tiempo en una misma máquina.
En tu caso creo que no sería estrictamente necesaria la segunda parte, así que podrías utilizar directamente el siguiente código:
$idVenta = date('U').mt_rand();
No olvides consultar la longitud máxima del id
en el TPV, ya que seguramente tendrás que acortar la segunda parte del id
generada por mt_rand()
.
Si el escenario propuesto fuera más complejo, deberías crear un servicio web dedicado exclusivamente a generar id
. Esto es por ejemplo lo que tiene que hacer Twitter, que ha desarrollado su propio generador distribuido de id
y lo ha publicado como software libre bajo el proyecto SnowFlake.
@javiereguiluz
Hola, no lo había pensado pero me parece buena idea, la he puesto y funciona, muchas gracias. Lo de twitter es mucho, ahora mismo con eso nos vale, si se dispara las ventas pues lo valoraré pero no creo que tengamos esa suerte jaja
@AlbertoVioque