How to generate random 20 digit uid(Unique Id) in python

Viewed 906

How to generate random 20 digit UID(Unique Id) in python. I want to generate UID for each row in my data frame. It should be exactly 20 digits and should be unique.

I am using uuid4() but it generates 32 digits UID, would it be okay to slice it [:21]? I don't want the id to repeat in the future.

Any suggestions would be appreciated!

2 Answers

I'm definately no expert in Python nor Pandas, but puzzled the following together. You might find something usefull:


First I tried to use Numpy but I hit the max of upper limit:

import pandas as pd
import numpy as np
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'], 'ID':[0,0,0,0]}
df = pd.DataFrame(data)  
df.ID = np.random.randint(0, 9223372036854775807, len(df.index), np.int64)
df.ID = df.ID.map('{:020d}'.format)
print(df)

Results:

    Name                    ID
0    Tom  03486834039218164118
1   Jack  04374010880686283851
2  Steve  05353371839474377629
3  Ricky  01988404799025990141

So then I tried a custom function and applied that:

import pandas as pd
import random
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'], 'ID':[0,0,0,0]}
df = pd.DataFrame(data)

def UniqueID():
    UID = '{:020d}'.format(random.randint(0,99999999999999999999))
    while UniqueID in df.ID.unique():
        UID = '{:020d}'.format(random.randint(0,99999999999999999999))
    return UID

df.ID = df.apply(lambda row: UniqueID(), axis = 1)
print(df)

Returns:

    Name                    ID
0    Tom  46160813285603309146
1   Jack  88701982214887715400
2  Steve  50846419997696757412
3  Ricky  00786618836449823720

I think uuid4() in python works, just slice it accordingly

Related