Search code examples
pythonpandasnumpyuuiduid

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


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!


Solution

  • 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