我一直在閱讀UUID RFC http://www.ietf.org/rfc/rfc4122.txt和使用python uuid
模塊進行實驗。爲了便於解釋,這裏是從規範中解除的UUID圖。什麼是最小和最大的有效第一類UUID?
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| time_low |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| time_mid | time_hi_and_version |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|clk_seq_hi_res | clk_seq_low | node (0-1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| node (2-5) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
按照我對規範的讀
,最小的1型UUID應該有time_low,time_mid,clk_seq_hi_res,clk_seq_low和節點設置爲全0,和time_hi_and_version應該有15位設置爲1,最大類型1的UUID應該有time_low,time_mid,clk_seq_hi_res,clk_seq_low和節點設置爲全1,並且time_hi_and_version設置爲全1,除了位12,13和14.
但是,試圖在python中生成這些失敗:
>>> u = uuid.UUID("{00000000-0000-0000-0001-00000000}")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.4/Frameworks/Python.framework/Versions/2.7/lib/python2.7/uuid.py", line 134, in __init__
raise ValueError('badly formed hexadecimal UUID string')
ValueError: badly formed hexadecimal UUID string
>>> u = uuid.UUID("{ffffffff-ffff-ffff-fff1-ffffffff}")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.4/Frameworks/Python.framework/Versions/2.7/lib/python2.7/uuid.py", line 134, in __init__
raise ValueError('badly formed hexadecimal UUID string')
ValueError: badly formed hexadecimal UUID string
我假定我我錯誤地閱讀了這個規範,但我很茫然。
啊優點:)它看起來像python uuid在施工時不會對數據進行任何驗證,但是您可以使用'version'屬性檢查一些後置條件,例如。但是,我的原始問題仍然存在。什麼是最小和最大的_valid_ type-1 UUID? –
嗯,它_does_做驗證 - 它驗證你的數據形成一個有效的UUID結構。但它不會將其驗證爲第1類UUID,因爲它會拒絕有效的第2類至第5類UUID。但至於你的其他問題,讓我更新答案。 – abarnert