This is a complete description of the common biometric record format described in ISO/IEC 19794-1:2011 spec (often abbreviated ISO 19794-1:2011 or ambiguously ISO 19794-1), except for the following changes:
- All content is distributed under permissive CC BY 4.0 license.
- Normative content was completely rewritten from scratch to avoid infringing copyrights.
- Non-normative commentary was dropped. Author added his own non-normative comments.
- Special notes were added for opensource and in-house software developers.
This format summary is complete in the sense that implementations written according to this document are also fully conforming implementations of ISO/IEC 19794-2:2011. There is no guarantee though and you should consult the original ISO/IEC 19794-1:2011 spec if in doubt.
This document was written by Robert Važan as part of his work on SourceAFIS fingerprint matcher using his legally obtained copy of ISO/IEC 19794-1:2011. Author has no affiliation with ISO. This format summary is distributed free of charge under Creative Commons Attribution 4.0 International License to enable truly open implementation of the format in opensource software. Nevertheless, author discourages use of ISO 19794 and other so-called "standard" formats in favor of plain images.
It is common practice at ISO to publish sets of related specifications, ambitiously called standards, as numbered "parts", and to put general information shared by all specs in the set into the first "framework" spec.
In this case, ISO 19794 is a set of biometric data formats while ISO 19794-2 is the "part" describing minutia-based fingerprint template format. ISO 19794-1, described in this document, is the "framework" spec for ISO 19794.
Framework specs are usually just a lot of informative content, but they are sometimes peppered with bits of essential technical information necessary to interpret other specs in the set. In case of ISO 19794-1, this essential technical information nearly entirely consists of the common record structure, including format of its header, date/time field, and quality and certification lists.
There is an earlier version of this spec, ISO/IEC 19794-1:2006, but that one is largely informative. Common biometric record structure necessary to correctly implement other ISO 19794 specifications only appeared in this version. Other than that, there are only minor differences between the two versions.
ISO/IEC 19794-2:2011, a format for minutia-based fingerprint templates, is based on common record format defined here.
When embedded in CBEFF (Common Biometric Exchange Framework Format, ISO/IEC 19785-3:2007) Biometric Data Block (BDB), ISO 19794 records have CBEFF Format Owner 0x101 (decimal 257), which is registered to ISO/IEC JTC 1 SC 37-Biometrics. CBEFF Format Type is modality-specific. See current registrations.
Biometric record is a binary file consisting of simple fields arranged in field groups. Fields or field groups may repeat. There are no keys or tags and fields are identified only by their position in the template. Numbers are in big-endian byte order.
Fields and field groups
Global header (HEADER)
Header contains information common to all biometric samples in the biometric data record:
File signature / magic number (MAGIC)
First four bytes of the biometric data record contain constant string consisting of three ASCII characters and a zero byte. This is a magic number (or file signature) that helps biometric software to automatically distinguish ISO 19794 formats from each other and from other file formats. This field can take the following values.
|"FMR\0"||ISO 19794-2||Fingerprint minutiae|
|"FSP\0"||ISO 19794-3||Fingerprint spectral data|
|"FIR\0"||ISO 19794-4||Fingerprint images|
|"FAC\0"||ISO 19794-5||Face images|
|"IIR\0"||ISO 19794-6||Iris images|
|"SDI\0"||ISO 19794-7||Signature (raw)|
|"FSK\0"||ISO 19794-8||Fingerprint skeletons|
|"VIR\0"||ISO 19794-9||Vascular images|
|"HND\0"||ISO 19794-10||Hand geometry|
|"SPD\0"||ISO 19794-11||Signature (processed)|
Format version (VERSION)
Version field contains 4-byte constant string in the form "NNN\0", i.e. three ASCII digits followed by a zero byte. First two digits encode major version. Third digit encodes minor version. Every version of the format identified by MAGIC field has distinct value of VERSION field.
Total record length in bytes (TOTALBYTES)
Total length in bytes is redundant, because the biometric record simply ends after the last SAMPLE block. It might be nevertheless useful to easily find the end of the biometric record in a stream of bytes.
Record length is encoded in 4 bytes as a big-endian unsigned 32-bit number. Minimum valid value of TOTALBYTES is 34, assuming implementations honor minimum value for COUNT field.
Number of biometric samples (COUNT)
An unsigned big-endian 16-bit number that indicates the number of SAMPLE blocks in the biometric record. Minimum value is 1, which means that at least one sample must be present.
Device certification flag (HASCERTS)
One-byte flag indicating presence of certifications. If this field is set to 1, CERTCOUNT field is present (but it may have zero value). If this field is zero, CERTCOUNT field is omitted and assumed to be zero.
Biometric sample (SAMPLE)
A single biometric sample (fingerprint, face image, ...). It consists of some common headers defined in this spec followed by modality-specific sample headers and modality-specific biometric data.
Single biometric record can contain multiple SAMPLE blocks. Their number is indicated in the COUNT field. Every biometric record must have at least one SAMPLE block.
Sample length in bytes (SAMPLEBYTES)
Sample length in bytes is redundant, because the sample simply ends after its last field. It might be nevertheless useful to easily skip samples in the biometric record without having to parse them.
Sample length is encoded in 4 bytes as a big-endian unsigned 32-bit number. It includes both sample headers and data. Minimum valid value of SAMPLEBYTES is 14.
Capture date and time (DATETIME)
This is the time when the sample was captured by scanning device, not the time when the biometric record was generated. If sample capture takes some time, this is the time when capture began.
DATETIME is a 9-byte field holding date and time in UTC split into components (year, month, ...).
If date/time is not provided, all bytes should be set to 0xff. Individual date/time fields can be also set to 0xff or 0xffff, indicating that this component of the date/time is not provided. In that case, all fields describing higher resolution date/time components should be also set to 0xff/0xffff. This allows implementations to omit milliseconds or to provide only date without time.
Year encoded as a 16-bit big-endian unsigned number. Value 0 is invalid. Value 0xffff indicates that year is not provided.
Month of year encoded as an 8-bit unsigned number in range 1 through 12. Value 0xff indicates that month is not provided.
Day of month (DAY)
Day of month encoded as an 8-bit unsigned number in range 1 through 31. Value 0xff indicates that day of month is not provided.
Hour of day encoded as an 8-bit unsigned number in range 0 through 23. Value 0xff indicates that hour is not provided.
Minute encoded as an 8-bit unsigned number in range 0 through 59. Value 0xff indicates that minute is not provided.
Second encoded as an 8-bit unsigned number in range 0 through 59. Value 0xff indicates that second is not provided.
Millisecond encoded as a 16-bit big-endian unsigned number in range 0 through 999. Value 0xffff indicates that millisecond is not provided.
Sensor technology (DEVTECH)
An unsigned 8-bit number encoding type of sensor technology. Its values are defined in modality-specific record format. Zero value means unknown sensor technology.
Sensor vendor ID (DEVVENDOR)
A big-endian unsigned 16-bit number identifying the vendor of the biometric sensor (which is itself identified in DEVID) or zero for unknown vendor. Interested sensor manufacturers can register with IBIA. See the list of currently registered organizations. This field is optional in two senses. Firstly, modality-specific format may exclude this field altogether. Secondly, even if this field is present, its value may contain default value. Zero should be used to mean unknown device vendor rather than 0x103 "Vendor Unknown". Opensource implementations should leave this field zeroed.
Sensor ID (DEVID)
A big-endian unsigned 16-bit number identifying the specific sensor model used to capture the biometric sample. Device IDs are assigned by sensor vendor identified in DEVVENDOR field. If device ID is unknown, this field should be zero. Opensource implementations should leave this field zeroed. This field is also optional in the sense that it may be completely omitted from modality-specific format.
Number of quality records (QCOUNT)
An unsigned 8-bit number indicating the number of QRECORD blocks that follow. Zero value means that quality measurement was not even attempted. Failed attempts are instead indicated by setting QUALITY to 255. This field is optional in the sense that it may be completely excluded from modality-specific format. Even if present, its value may be zero.
Quality record (QRECORD)
This 5-byte field group describes one quality measure of the biometric sample. Several different quality measures can be included in separate QRECORD blocks. Number of QRECORD blocks is indicated in QCOUNT field. If QCOUNT field is not present in modality-specific format, this field group is not present either.
Sample quality (QUALITY)
An unsigned 8-bit number holding quality score of the biometric sample in range 0 (lowest) through 100 (highest) measured according to QALGO. Special value 255 indicates failure to measure sample quality. If quality measurement was not even attempted, the whole QRECORD block should be omitted.
Quality algorithm vendor (QVENDOR)
If quality algorithm vendor is unknown or unreported, this field should be set to zero rather than 0x103 "Vendor Unknown".
Quality algorithm (QALGO)
This is a big-endian 16-bit unsigned number identifying the algorithm used to measure biometric sample quality recorded in QUALITY field. Quality algorithm ID is namespaced under QVENDOR, i.e. each vendor has its own algorithm IDs. Quality algorithm can be optionally registered in IBIA's quality algorithm directory.
Expensive QVENDOR registration is hostile to opensource, but opensource implementations can just reuse one of the already defined quality algorithms. It is also possible to set this field to zero to indicate that quality algorithm is not specified.
Number of certification records (CERTCOUNT)
An unsigned 8-bit number indicating the number of CERTIFICATE blocks that follow. This field is only present if HASCERTS is set. Even if this field is present, its value may be zero. If HASCERTS is zero, this field is not present and its value is assumed to be zero.
Certification record (CERTIFICATE)
This 3-byte field group describes one certification of biometric sensor used to capture the sample. Several different certifications can be included in separate CERTIFICATE blocks. Number of CERTIFICATE blocks is indicated in CERTCOUNT field. If HASCERTS is zero, this field group is not present.
Certification authority (CERTIFIEDBY)
Certification scheme (CERTTYPE)
An unsigned 8-bit number identifying specific certification scheme. Modality-specific format defines possible certification schemes.