Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Noting iOS 7 behavior change with NIC addresses and removing references to functions that are now discouraged because of it

...

Custom functions for creating UUIDs are more portable than plug-in based UUIDs. Though you do need FileMaker Pro Advanced to install custom functions in a file, well-designed functions will execute correctly in all FileMaker platforms without the need to distribute and install a plug-in, to create a server-compatible version of a plug-in, or even the ability to run a plug-in in the case of FileMaker Go.

Ray Cologon's Base36 uID System

Ray Cologon has been using a text-based UUID scheme since 2005. The uID function combines the creation timestamp, the device's network card (NIC, or MAC) address, and FileMaker's internally generated record id. These are encoded in Base36 (0-9 and A-Z) to be relatively compact and human-readable. Cologon's demonstration file includes additional custom functions for reading the encoded timestamp, NIC address, and record id from a generated key. uIDs look something like this:

No Format
1 8ADOO OJU0R W8FWV TPML4

For security reasons Apple removed the ability for iOS apps, including FileMaker Go, to access the device NIC address in iOS 7. FileMaker Go running on iOS 7 will simply return "02:00:00:00:00:00" for the NIC address, regardless of the actual NIC address. Historically, some FileMaker UUID functions used Get ( SystemNICAddress ) as a component of generated UUID values, but this leads to a significant risk of different devices creating duplicate values at the same time, so any UUID functions using Get ( SystemNICAddress ) are now strongly discouraged. The Get ( PersistentID ) function introduced in FileMaker 12 is an acceptable substitute.

Tom Robinson's UUID ( Type ) function

Tom Robinson's UUID ( Type ) function creates hexadecimal UUIDs consistent with the international standard scheme. By passing the function different parameters, you can generate version 1 UUIDs (encoding timestamp and NIC address) or version 4 UUIDs (encoding random numbers). A sample (version 14) UUID looks like this:

No Format
1de7b380f47ac10b-cff758cc-11df4372-b581a567-00264a0d4b42

...

0e02b2c3d479

Calling this function with UUID ( 1 ) or UUID ( "4h1h" ) will attempt to use the Get ( SystemNICAddress ) function, which will generate a value with random digits:

...

not return a correct result in iOS 7 or later, potentially leading to duplicate values. So using this function to generate type 1 UUIDs is strongly discouraged.

Jeremy Bante's UUID function

The UUID UUIDTimeDevice function by Jeremy Bante (maintained in the fmpstandards Github repository) encodes the creation timestamp (UTC), the device's network card (NIC) addresspersistent ID, and a self-managed serial number. The generated values can be stored in a number field, which has certain performance benefits, and are meaningfully sortable by creation timestamp. Related functions are available for extracting the encoded timestamp and NIC address, and for converting values to the conventional hexadecimal representation. A value from UUID looks like this:

No Format
1-2-063432286093-2600000-02476-000164451142466
12063524304235234000007854171467283736889

For situations where the privacy of a device NIC address persistent ID or a record creation timestamp is a concern, there is a related UUIDRandom function, which generates values like this:

No Format
4-2-034631749357-3649139-15519-272178513838080
42141279241146726753204187162615025729536