Creating a UID Hierarchy

Developers often ask for advice on how to create their own UIDs and manage roots, so here is a suggested simple scheme. There is nothing special about this scheme, but it is as good as any, so feel free to use it "as is" or to modify in any way you like.

Throughout this page {YOURROOT} is used to represent the single root used by your company. See the pages on [UIDs] for details of how to get a root yourself, either by right (e.g. UK companies) or from Medical Connections Ltd.

Most developers need two types of UIDs

Root for versions of your software (Implementation UIDs)

You need this to fulfil the DICOM requirement for a unique Implementation UID for each software release and you need to allow for other multiple versions of multiple applications.


Use {YOURROOT}.1 for all software versions

This is followed by a product number and then a version number. Obviously you will need to maintain a lookup somewhere relating product names to their sequential numbers.

So, version of your 2nd product would have the implementation UID: {YOURROOT}.

Note that this is the final UID used in your application and DICOM conformance statement - nothing will be appended to it.

Root for individual installations

Unlike the implementation UID, which is constant for all copies of the same software release, all applications which create DICOM UIDs need to have both a unique root and a means to create unique instance UIDs from it. This applies for instance to equipment which:

  • Creates new images
  • Creates presentations states or secondary captures
  • Allocates STudy UIDs (i.e. modality worklist servers)
  • Needs to create temporary object UIDs (e.g. DICOM printers)


Use {YOURROOT}.2 for all installation roots

This is followed by a serial number for the individual piece of equipment - which must of cause be pure numeric, and in keeping with UID_Rules must not include any leading zeros.

So, the root for equipment serial number 0372764 would be: {YOURROOT}.2.372764

Unlike the implementation UID above, this is only a basis for creating subsidiary UIDs according to DICOM UID_Rules, so should be either used internally yourself, or placed in the DicomObjects UIDRoot Registry_value if you wish to use the NewUID method.