我怎樣才能實現一個函數增量(UUID),該給定版本4 UUID A產生一個有效版本4 UUID其中B:如何遞增/遞減隨機(類型4)UUID?
- B> A
- 不存在C,其中B> C>該給定版本4 UUID A A
與同爲遞減(UUID)產生一個有效版本4 UUID B其中:
- 乙<甲
- 不存在C,其中乙<Ç<甲
我怎樣才能實現一個函數增量(UUID),該給定版本4 UUID A產生一個有效版本4 UUID其中B:如何遞增/遞減隨機(類型4)UUID?
與同爲遞減(UUID)產生一個有效版本4 UUID B其中:
不可能的。除了爲版本字段和變體字段保留的6位之外,v4 UUID由完全隨機數據組成 - 即沒有固有的「序列」概念,在該序列中定義有意義的增量/減量操作。
這裏是一個Python函數來實現你想要的:
def increment_uuid(uuid, increment):
# Return a UUID value incremented by an integer
hex_str = uuid[:8] + uuid[9:13] + uuid[14:18] + uuid[19:23] + uuid[24:]
incremented_val = int(hex_str, 16) + increment
assert(incremented_val >= 0 and incremented_val <= 2 ** 128)
incremented_hex = format(incremented_val, '032x')
incrmented_uuid = incremented_hex[:8] + '-' + incremented_hex[8:12] + '-' + incremented_hex[12:16] \
+ '-' + incremented_hex[16:20] + '-' + incremented_hex[20:]
return incrmented_uuid
現在,您可以簡單地通過1遞增UUID獲得下一個在「序」:
import uuid
uuid_a = uuid.uuid4() # e.g. a32258b5-2781-44ec-9e00-f4b1185e9936
uuid_b = increment_uuid(str(uuid_a),1) # e.g. a32258b5-2781-44ec-9e00-f4b1185e9937
當然,它只是將數據視爲128位十六進制值,並忽略版本號和變體位的限制。
你爲什麼要比使用'=='或'!='以外的任何東西來比較GUID?除此之外,它們並不是真的應該彼此有任何關係...... – cHao
除此之外,想出一個比給定的「更大」的新UUID並不總是可能的。考慮一個UUID ffff ... ffff。增量(即UUID)應該返回什麼?即使在可能的情況下,任意限制範圍也會使碰撞發生的可能性更大。 – cHao