The checksum is an md5 hash of the validvalue in the database field civicrm_contact.hash
, the Contact ID, the current timestamp and the life-span.
Therefore, as long as the contact hash stays the same (it never changes, unless you do it manually), then you can generate as many tokens as necessary.
Once generated, checksums look like xxxx_yyyy_zzzz
. The first part is the md5 hash, the second part is the timestamp of when it was generated, and the third part is the life-span. That way CiviCRM can easily lookup the contact.hash, and with the yyyy
and zzzz
, be able to recalculate/validate the xxxx
part.
For reference, see CRM/Contact/BAO/Contact/Utils.php
, the function generateChecksum
.