Załóżmy, że w aplikacji identyfikatory przyznawane wszystkim obiektom generowane są przez następujący kod:
def random_id_generator():
start_timestamp = 1356994800
while True:
current_timestamp = int(time.time())
timestamp = (current_timestamp - start_timestamp) / 60
r = struct.unpack("B", os.urandom(1))[0] << 24
yield struct.pack("L",(r ^ timestamp)).encode("hex")
Założenie jest takie, że przyznawane identyfikatory nie powinny być sekwencyjne, tak by enumeracja obiektów z użyciem bezpośredniego użycia identyfikatora była nieefektywna. Przewiduje się generowanie nie więcej niż jednego identyfikatora na sekundę. Identyfikatory muszą pozostać unikalne przez okres 10 lat.
Pytanie - ile widzicie błędów w tym podejściu?

2. Przez 60 sek. timestamp ma tą samą wartość (ryzyko kolizji)
3. Wyciek informacji (czas wygenerowania identyfikatora)