Answers.Body: <p>The checksum is an md5 hash of the value in the database field <code>civicrm_contact.hash</code>, the Contact ID, the current timestamp and the life-span.</p>
  <p>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.</p>
  <p>Once generated, checksums look like <code>xxxx_yyyy_zzzz</code>. 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 <code>yyyy</code> and <code>zzzz</code>, be able to recalculate/validate the <code>xxxx</code> part.</p>
  <p>For reference, see <code>CRM/Contact/BAO/Contact/Utils.php</code>, the function <code>generateChecksum</code>.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-07-30T19:18:54.493Z
Answers.LastActivityDate: 2021-07-30T20:00:30.580Z
Answers.LastEditDate: 2021-07-30T20:00:30.580Z
Answers.UserDisplayName: bgm
Body: <p>Where are checksums stored in the database? Is there any considerations to the limitations of how many checksums can be created at once in a mailing? If I send a checksum email to ~250,000 will that work without issue?</p>
  
Tags: <database><checksum>
Title: Where are checksums stored in the database?
ThreadText: # Where are checksums stored in the database?
  
  (Asked by: username_0 on 2021-07-30)
  
  Where are checksums stored in the database? Is there any considerations to the limitations of how many checksums can be created at once in a mailing? If I send a checksum email to ~250,000 will that work without issue?
  
  **Tags:** database, checksum
  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_1 on 2021-07-30. Score: 10 | Accepted answer
  
  The checksum is an md5 hash of the value 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`.
  
  
  ---
  
  