Мне не нравится этот бит:
uuid = uuid[:5]
В лучшем сценарии (uuid распределены равномерно) вы получите столкновение с вероятностью более 0,5 после 1k элементов!
Это из-за проблемы дня рождения . Вкратце доказано, что вероятность столкновения превышает 0,5, когда количество элементов превышает квадратный корень из числа возможных меток.
У вас 0xFFFFF = 10 ^ 6 меток (разных чисел), поэтому после 1000 сгенерированных значений у вас начнутся коллизии.
Даже если вы увеличите длину до -1, у вас все еще есть проблема:
str(random.random())[2:]
Вы начнете сталкиваться после 3 * 10 ^ 6 (те же самые расчеты следуют).
Я думаю, что вам лучше всего использовать uuid, который, скорее всего, будет уникальным, вот пример
>>> import uuid
>>> uuid.uuid1().hex
'7e0e52d0386411df81ce001b631bdd31'
Обновление
Если вы не доверяете математике, просто запустите следующий пример, чтобы увидеть столкновение:
>>> len(set(hashlib.sha256(str(i)).hexdigest()[:5] for i in range(0,2000)))
1999 # it should obviously print 2000 if there wasn't any collision