I ran into this thread via google search, if anyone else does as well I'd like to share my current solution. You can reduce the ID by XORing registers together, for example:
uint64_t idCodeShort = (((uint64_t) (SIM_UIDMH ^ SIM_UIDML)) << 32) | ((uint64_t) (SIM_UIDL ^ SIM_SDID));
Or:
uint32_t idCodeEvenShorter = (SIM_UIDMH ^ SIM_UIDML ^ SIM_UIDL ^ SIM_SDID);
This WILL NOT guarantee a unique code but may be suitable for your particular situation (seed value/etc).