0

i have a problem statement where i need to find the unique number in python and save it in database to PostgreSQL .Every time it should generate unique number (i.e should not be repeated)

Also i need to append one prefix as well to the unique number :

The solution I Tried till now :

import time

def generate_unique_reference_number(order_type_id=28):
        order_type_prefix = '{:<02}'.format(order_type_id)  # 2 digit
        current_time = str(int(time.time() * 1000000))  # 16 digit
        return int(order_type_prefix + current_time)

numbers = []
numbers_set = set()
for i in range(10000):
    num = generate_unique_reference_number(28)
    numbers.append(num)
    numbers_set.add(num)

print(len(numbers))
print(len(numbers_set))
print(len(numbers) - len(numbers_set))

Its still giving me duplicate values .

Max limit for bigint in postgres server is :

-9223372036854775808 to 9223372036854775807

i can use nano seconds(i.e 19 digits limit same as postgres) ,but i need to append prefix of 2 digits as well .

def generate_unique_reference_number(order_type_id=28):
            current_time = str(int(time.time_ns()))  # 19 digit
            return int(current_time)

even nano seconds approach return duplicates but lesser count .

divyanayan awasthi
  • 890
  • 1
  • 8
  • 33
  • 1
    Under what conditions do you expect `int(time.time() * 1000000)` to be unique? – Joe Apr 03 '20 at 13:22
  • 1
    Does this answer your question? [Generating non-repeating random numbers in Python](https://stackoverflow.com/questions/2076838/generating-non-repeating-random-numbers-in-python) – Joe Apr 03 '20 at 13:23
  • If you need unique numbers, then why don't you use a database sequence? –  Apr 03 '20 at 13:33
  • A user can create order from UI .for that unique guid is required which needs to persisted in db along with primary key .since we have queue between UI and service ,hence UI wont get the unique primary key back from the service to updated . – divyanayan awasthi Apr 03 '20 at 13:39
  • @Joe thanks for the link . – divyanayan awasthi Apr 03 '20 at 13:44

0 Answers0