我一直在阅读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