CookML „RID“

The recipe id (rid) has to be constructed always in the same way. CookML is using the ID from Ambrosia since 1997.
The RID contains a random number and a simple hash of the current username (called „Creator ID“) upon creation, which never changes and a date/time value, which can be updated if the recipe is changing. This allows to detect a never version of a recipe during import. The result are two 32 bit values written as „value 1,value 2“ in CookML.

The Creator ID

The system user name (login name) is summed up in the following way:
For each character (in upper case): Creator-ID += Ascii(character) * character-position
Character-position is starting at 1
Only the lower 12 bits are used, over runs are ignored.

  W B R U H I N
ordinal value 87 66 82 85 72 73 78
*
position 1 2 3 4 5 6 7
=
  87 132 246 340 360 438 546 += 2149

The Serial ID

Starting with a random number which is increased by 1 (if multiple serial id’s are generated at once), any over runs are ignored.

Updating the RID

If an object (recipe) has a valid “RID” one updates only the date portion, the Serial-ID and the Creator-ID will never be changed. This is a change compared to the first version of cookML!


Example

Value 1, Date

  3 2 1 0
Bit 1 0 9 8 7 8 5 4 3 2 1 0 9 8 7 8 5 4 3 2 1 0 9 8 7 8 5 4 3 2 1 0
  year – 1980, 11 bits month, 4 bits days, 5 bits hours, 5 bits minutes, 6 bits
example: 12:09, 16-09-2006 = 27886345
  0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1

Value 2, Creator ID and Serial ID

  3 2 1 0
Bit 1 0 9 8 7 8 5 4 3 2 1 0 9 8 7 8 5 4 3 2 1 0 9 8 7 8 5 4 3 2 1 0
  Creator ID, 12 bits Serial ID, 20 bits
Example: Creator ID = 2149, Serial ID = 783150
  1 0 0 0 0 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 0 0 1 1 0 0 1 0 1 1 1 0