The documentation says:
“An IfcGloballyUniqueId is a Globally Unique Identifier (GUID) which is an auto-generated 128-bit number.”
However:
0123456789012345678901234567890123456789012345678901234567890123
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$
=>
64 values * 22char = 6bit * 22char = 132bit So there are 4extra bits and only 2 bits in first character are meningful.
In other words the first character in IFCGUID can only be ‘0’-‘3’.
E.g.
2sif80O2kC83_GLKmIlyJ$ => b2ffcafc-a5db-4d28-b01a-1b72abeed016
Asif80O2kC83_GLKmIlyJ$ => b2ffcafc-a5db-4d28-b01a-1b72abeed016
In this case A(001010) -> 2 (000010)
And this is why its pretty bad bug because converting back to 128 does not work.
So what this means:
This brings an increased risk of malfunction if a software imports ifc and the native data model of the software uses UUID converted from IfcGUID.
E.g. An ifcfile contains two instances of IfcBuilding (A & B). The Building A has a guid(2sif80O2kC83_GLKmIlyJ$) and the Building B has a guid (Asif80O2kC83_GLKmIlyJ).
When the ifcfile converted to the native data model, both of the buildings have the same UUID(b2ffcafc-a5db-4d28-b01a-1b72abeed016)!!
Then it’s up to the software what will happen next. If user didn’t get any fatal error messages what, would happen when the user let’s say creates a bill of quantities of building(b2ffcafc-a5db-4d28-b01a-1b72abeed016) ?
-Sami Lyden & Hannu Lahtela-