Starting with CiviCRM 4.7, the system check mechanism allows extensions to define new checks and the status messages to appear on the system status page. This extension has two purposes
- To demonstrate the use of hook_civicrm_check()
- To find zombies.
Zombies are contacts where the "is_deceased" column is marked as null, rather than 1 (yes, they're deceased) or 0 (no, they're alive). These undead contacts, along with the equivalents for privacy settings such as "Do not email" and "Do not mail", mean that the contacts are excluded from mailings but don't appear to be dead (or have the privacy preference set).
This is usually the result of a bad import. If you include a field in an import but leave it blank, it's saved as null. In the case of some custom Yes/No fields, it's appropriate to have a null value if you don't have that information. However, users will sometimes import the Is Deceased field but only mark the dead people with ones, neglecting to fill the rest with zeroes. This results in zombies.
If you have zombies, a status message (see screenshot) will appear explaining what field(s) have null values. You can then run a query in the database, or use Search Builder and batch update with a profile, to deal with your zombies by setting the field(s) to appropriate values.