【问题标题】:Generate determinisitic UID dependent on the MAC adress and user name根据 MA​​C 地址和用户名生成确定性 UUID
【发布时间】:2020-06-22 03:50:07
【问题描述】:

我正在编写一个 Python 例程来生成 DICOM 文件。在这种情况下,我需要指定 Instance Creator UID 标签,用于唯一标识创建 DICOM 文件的设备。 所以我需要一个函数来为给定的机器和启动 DICOM 创建例程的特定用户生成这样的 UID。

我猜想 UUID 可以从 MAC 地址和用户名创建。但是python中uuid模块生成的UID是随机的,所以每次调用例程的UID都不一样。

有没有办法生成 确定性 UID,这取决于 MAC 地址和用户名?

【问题讨论】:

  • 请参考thisthis的答案。那些在生成 DICOM UID 和生成它们的多种算法时讨论规则。

标签: python python-3.x uuid dicom pydicom


【解决方案1】:

UUID3 和 5 是基于名称的 uuid,因此它们不会随机变化(按时间组件)。

import uuid
import getpass

username = getpass.getuser(). # Username
node = hex(uuid.getnode())  # MAC address

urn = 'urn:node:%s:user:%s' % (node, username)

for i in range(3):
    print (uuid.uuid3(uuid.NAMESPACE_DNS, urn))

输出:

4b3be55c-c6d9-3252-8b61-b16700fa6528
4b3be55c-c6d9-3252-8b61-b16700fa6528
4b3be55c-c6d9-3252-8b61-b16700fa6528

欲了解更多信息,请联系https://pymotw.com/3/uuid/

【讨论】:

  • 虽然这是真的,但它对 DICOM uid 没有多大帮助 - 它们有另一种格式,并且还必须以供应商特定的前缀开头。您可能可以使用 MAC 地址和用户名的哈希值来生成 UID。
  • 不过,另一方面,您可以将该输出转换为十进制数,将其转换为正确的格式,然后添加前缀。如果生成的 UID 不长,这是一个很好的解决方案。
  • @MrBeanBremen:Here 是如何使用 C# 将其传输/转换为 DICOM UID。需要翻译成python。
  • @AmitJoshi,很好!应该很容易将其转换为 Python。
  • @MrBeanBremen:这确实是我所做的,我将生成的 UID 附加到供应商特定的前缀,例如:f"1.3.6.1.4.1.32839.1{uuid.uuid3(uuid.NAMESPACE_DNS, urn).int:039}"
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多