Generate Unique Id only numbers

How can I generate a Unique Id where all are numbers and not letters?

Solved Solved
0 13 3,503
1 ACCEPTED SOLUTION

hI @Yesenia_Leon,

Have you taken a look at RANDBETWEEN() function?

However , please note that the repeat probability of a numeric unique number generated by RANDBETWEEN() will be significantly higher than an equal length alphanumeric UNIQUEID()

View solution in original post

13 REPLIES 13

hI @Yesenia_Leon,

Have you taken a look at RANDBETWEEN() function?

However , please note that the repeat probability of a numeric unique number generated by RANDBETWEEN() will be significantly higher than an equal length alphanumeric UNIQUEID()

Thank you very much for your help.

Another often overlooked problem to be aware ofโ€ฆthese apps run in a distributed multi-user system. When generating your own unique number, you have to take extra precaution to prevent two different users from obtaining the same unique number. This is not an easy task. The more users in the app, the more likely a clash will occur.

Thank you, letโ€™s keep that in mind.

I use
MAX(BIObjects[Id]) + 1

Where or how did you use this?

Hola Pedro! en cada tabla se necesita siempre un valor ID รบnico que permita identificar cada una de las filas que las componen. En la mayorรญa de los casos este valor es definido aleatoriamente, con una string de letras y nรบmeros generados automaticamente bajo la expresiรณn UNIQUEID(), si Appsheet reconoce que una de tus columnas tiene valores que justifiquen elegirla como KEY, entonces en INITIAL VALUE se escribirรก automรกticamente esta funciรณn. La otra opciรณn es usar una columna que sepas con 100% de seguridad que va a tener valores que se repetirรกn. Por ejemplo si tenes una lista de clientes y estos clientes tienen correos electrรณnicos, la columna de Emails serรญa ideal, porque los correos son valores รบnicos que corresponden a determinados sujetos.

Ahora en muchos otros casos, cuando alguien llega a Appsheet con preconceptos u otras formas de organizaciรณn de procesos, los valores aleatorios no satisfacen las necesidades inmediatas, porque por ejemplo en la empresa se usan valores identificatorios progresivos, para ordenar stock quizรกs, o para mantener un conteo, etc. Entonces es aquรญ donde se buscan IDs consecutivos, que son muy peligrosos dentro de una estructura relacional. Es imperativo que los valores sean รบnicos, y los consecutivos pueden repetirse si se dan ciertas circunstancias.

Personalmente para mรญ la mejor soluciรณn serรญa tomar valores relativamente consecutivos, referidos al tiempo (fecha y hora) y agregarle al final una string aleatoria de nรบmeros. Asรญ como se organizan por ejemplo los serial numbers en la producciรณn de guitarras. Si miras uno de esos nรบmeros podes descubrir cuรกndo se fabricรณ, donde, etcโ€ฆ

Esta expresiรณn concatenada te darรญa ese resultado (aunque seguro hay formas de sintetizarla):

YEAR(NOW()) & 
MONTH(NOW()) & 
DAY(NOW()) & 
HOUR(TEXT(TIMENOW()())) & 
MINUTE(TEXT(TIMENOW())) & 
SECOND(TEXT(TIMENOW())) & 
RANDBETWEEN(10000000, 99999999)

El resultado de esas expresiรณn es por ejemplo: 2021123015554751696191
Siendo los 4 primeros dรญgitos el aรฑo, los 2 siguientes el mes, los dos siguientes el dรญa. Despuรฉs vienen la hora, minutos y segundos, que estos pueden tener 1 o 2 fรญgitos cada uno (se puede lograr que tengan imperativamente 2 dรญgitos). Los 8 nรบmeros restantes son aleatorios. Asรญ lograrรญas un nรบmero consecutivo en la primera mitad del resultado, y un nรบmero aleatorio al final.

Saludos!

Excelente, gracias por tu consejo, tomarรฉ la recomendaciรณn de dejarlo con la expresiรณn concatenada, ya que actualmente lo tenรญa con uniqueid(), pero para ser sincero, me parecรญa prรกctico (por la poca cantidad de caracteres), pero a su vez, me parecรญa un poco dรฉbil por sentir que podรญa llegar a repetirse.

Que tengas un excelente dรญa!.

Me alegro que te haya servido! Si no confรญas en UNIQUEID() por tener pocos caracteres (aunque no son pocos, son bastantes millones de combinaciones), tambiรฉn podes concatenar dos, tres, cuatro, los que quieras, expresiones UNIQUEID()

UNIQUEID() & UNIQUEID()

Eso te darรญa de resultado 16 caracteres aleatorios, prรกcticamente infinito.

You might also consider using UNIQUEID("UUID").

Thank you so much Steve, will consider it too.

Alternatively:

(TEXT(NOW(), "YYYYMMDDHHMMSS") & RANDBETWEEN(10000000, 99999999))

See also TEXT()

You could add another 10,000,000 random numbers using this instead of just RANDBETWEEN(10000000, 99999999):

RIGHT(("00000000" & RANDBETWEEN(10000000, 99999999)), 8)

I donโ€™t know what the actual limits of RANDBETWEEN() are, but I would feel comfortable using an upper bound up to 2 billion (2,000,000,000).

Gracias Steve! Siempre atento, se aprecia mucho tu trabajo y dedicaciรณn!

Top Labels in this Space